1. 程式人生 > 其它 >殘缺的棋盤

殘缺的棋盤

別小看這個題,通過率很低的,比賽的時候我改了好多次最後才改出來

考慮什麼時候兩者的最短路徑是唯一的

一:兩者剛好在對角線的時候
二:兩者同列或者同行
對於第一種情況,如果缺點恰好在其對之間的對角線上(之外的對角線肯定不會造成影響),最短路就會改變+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;
}