殘缺的棋盤
阿新 • • 發佈:2022-03-27
別小看這個題,通過率很低的,比賽的時候我改了好多次最後才改出來
考慮什麼時候兩者的最短路徑是唯一的
一:兩者剛好在對角線的時候
二:兩者同列或者同行
對於第一種情況,如果缺點恰好在其對之間的對角線上(之外的對角線肯定不會造成影響),最短路就會改變+1
對於第二種情況,如果缺點剛好處於同列(行)之間,那麼最短路是不會發生變化的
三:兩者的最短路不是唯一的,這樣無論缺點在哪裡都不會對最短路造成影響
點選檢視程式碼
#include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long int r1,c1,r2,c2,r3,c3,tot=1; int main(){ while(~(scanf("%d%d%d%d%d%d",&r1,&c1,&r2,&c2,&r3,&c3))){ int ans; int len1=abs(r1-r2); int len2=abs(c1-c2); int cha=abs(len1-len2); int rmax=max(r1,r2),rmin=min(r1,r2),cmax=max(c1,c2),cmin=min(c1,c2); if((abs(r3-r1)==abs(c3-c1)&&rmin<=r3&&r3<=rmax&&c3<=cmax&&cmin<=c3)&&cha==0) ans=len1+1; else if((len1==0&&r3==r1)||(len2==0&&c3==c1)) ans=max(len1,len2); else ans=cha+min(len1,len2); printf("Case %d: %d\n",tot,ans); tot++; } return 0; }