CF 15BLaser
Posted cbyyc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF 15BLaser相关的知识,希望对你有一定的参考价值。
题意
给出\(n\times m\)的一块巧克力,再给出两个点,两点只能同时移动,两点所占位置巧克力会融化,问所有能走位置走遍之后还剩下几块巧克力。
Idea
题目就是给两个矩形,然后算两个点所走位置的并集对于全集的补集。点都可以变成左上方一个点和右下方,然后可以分成两种情况。第一种是两个所走矩形不相交,第二种是相交。
如图
求蓝色部分的面积
Code
//n,m<=le9->m*n<=1e18,要开long long
signed main()
int T=read();
while(T--)
int n=read(),m=read(),x1=read(),yy=read(),x2=read(),y2=read();
int a,b,sum;
if(yy>y2) swap(yy,y2);
if(x1>x2) swap(x1,x2);
a=abs(x2-x1); b=abs(y2-yy);
a=x1+n-x2; b=yy+m-y2;
sum=a*b*2;
if(a*2>n&&b*2>m) sum-=(a*2-n)*(b*2-m);
sum=n*m-sum;
printf("%I64d\n",sum);
return 0;
以上是关于CF 15BLaser的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Global Round 15 CF1552 A~G 题解