題意:給出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); } }