残缺的棋盘

别小看这个题,通过率很低的,比赛的时候我改了好多次最后才改出来

考虑什么时候两者的最短路径是唯一的

一:两者刚好在对角线的时候
二:两者同列或者同行
对于第一种情况,如果缺点恰好在其对之间的对角线上(之外的对角线肯定不会造成影响),最短路就会改变+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;
}
posted @ 2022-03-27 13:50  wzx_believer  阅读(27)  评论(0编辑  收藏  举报