问题转化为,单个面积*2-交面积。下面求交面积。把直角坐标系中全部转90°,每个方块的坐标都做相应变化,这样会发现新的坐标系中空出了一部分方块,找规律发现,若求交矩形包含的方框数,其中恰好一半是前面空出来的方块。所以实际交面积=转换后坐标系上交矩形面积/2。
题面链接:http://acm.xidian.edu.cn/problem.php?id=1064
#include <bits/stdc++.h> using namespace std; typedef long long LL; struct point { LL x,y; }; LL S(LL r) { LL d=*r+; )/; } LL xxx(point A,point B) { LL x=abs(A.x+A.y-B.x-B.y)+; LL y=abs(A.x-A.y-B.x+B.y)+; )/; } int main() { LL x1,x2,y1,y2,r,x,y; while(cin>>x1>>y1>>x2>>y2>>r) { point p; p.x=x=abs(x1-x2); p.y=y=abs(y1-y2); *r) { cout<<*S(r)<<'\n'; continue; } point A,B; if(abs(x)+abs(y-r)<=r) { A.x=,A.y=r; B.x=x,B.y=y-r; } else { A.x=r,A.y=; B.x=x-r,B.y=y; } cout<<*S(r)-xxx(A,B)<<'\n'; } }