码迷,mamicode.com
首页 > 其他好文 > 详细

CF 15B【Laser】

时间:2019-09-09 19:28:41      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:alt   swap   idea   sign   部分   两种   print   mes   http   

题意

给出\(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 15B【Laser】

标签:alt   swap   idea   sign   部分   两种   print   mes   http   

原文地址:https://www.cnblogs.com/cbyyc/p/11493523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!