題目鏈接:http://codeforces.com/problemset/problem/15/B
題意:給出n*m的一塊巧克力,再給出兩個點,兩點只能同時移動,兩點所占位置巧克力會融化,問所有能走位置走遍之后還剩下幾塊巧克力。
思路:題目就是給兩個矩形,然后算兩個點所走位置的并集對于全集的補集。點都可以變成左上方一個點和右下方,然后可以分成兩種情況。第一種是兩個所走矩形不相交,第二種是相交。
題意:給出n*m的一塊巧克力,再給出兩個點,兩點只能同時移動,兩點所占位置巧克力會融化,問所有能走位置走遍之后還剩下幾塊巧克力。
思路:題目就是給兩個矩形,然后算兩個點所走位置的并集對于全集的補集。點都可以變成左上方一個點和右下方,然后可以分成兩種情況。第一種是兩個所走矩形不相交,第二種是相交。

上圖表示相同顏色是一樣長的,,圖比較水,見諒。兩個點表示給你的兩個點。

上面表示兩種情況。
求得是黑框內紅框外的面積。
代碼: 
View Code


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);} }
?