CodeForces 15B Laser

 題目鏈接:http://codeforces.com/problemset/problem/15/B

題意:給出n*m的一塊巧克力,再給出兩個點,兩點只能同時移動,兩點所佔位置巧克力會融化,問所有能走位置走遍之後還剩下幾塊巧克力。

思路:題目就是給兩個矩形,然後算兩個點所走位置的並集對於全集的補集。點都可以變成左上方一個點和右下方,然後可以分成兩種情況。第一種是兩個所走矩形不相交,第二種是相交。

上圖表示相同顏色是一樣長的,,圖比較水,見諒。兩個點表示給你的兩個點。
上面表示兩種情況。
求得是黑框內紅框外的面積。
代碼:
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m,x1,y1,x2,y2;
        ll a,b;
        ll sum=0;
        scanf("%d%d%d%d%d%d",&n,&m,&x1,&y1,&x2,&y2);
        if(y1>y2)
            swap(y1,y2);
        if(x1>x2)
            swap(x1,x2);//變成左上 右下的形式,我看着順眼。
            a=abs(x2-x1);
            b=abs(y2-y1);
        a=x1+n-x2;//算長
        b=y1+m-y2;//
        sum=a*b*2;//兩個矩形是一樣的
        if(a*2>n&&b*2>m)//重疊
        {
            sum-=(a*2-n)*(b*2-m);
        }
        sum=(ll)n*m-sum;
        printf("%lld\n",sum);

    }
}
View Code

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章