求助:11分,样例擦肩而过
查看原帖
求助:11分,样例擦肩而过
738230
chenmo2008楼主2023/9/7 23:26
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
bool M[10][10];
int X[MAXN][6];
int main(){
	char t;
	int ans = 0,F = 0,fi,fj,C = 0,ci,cj,cix,cjx,fix,fjx;
	for(int i = 0;i < 10;i++){
		for(int j = 0;j < 10;j++){
			t = getchar();
			switch(t){
				case '*':M[i][j] = 1;break;
				case 'C':ci = i;cj = j;cix = i;cjx = j;break;
				case 'F':fi = i;fj = j;fix = i;fjx = j;break;
			}
		}
	}
	while(ans <= 100000){
		ans++;
		switch(F){
			case 0:fi--;break;
			case 1:fj++;break;
			case 2:fi++;break;
			case 3:fj--;break;
		}
		if(M[fi][fj] || fi < 0 || fi >= 10 || fj < 0 || fj >= 10){
			switch(F){
				case 0:fi++;break;
				case 1:fj--;break;
				case 2:fi--;break;
				case 3:fj++;break;
			}
			F = (F + 1) % 4;
		}
		switch(C){
			case 0:ci--;break;
			case 1:cj++;break;
			case 2:ci++;break;
			case 3:cj--;break;
		}
		if(M[ci][cj] || ci < 0 || ci >= 10 || cj < 0 || cj >= 10){
			switch(C){
				case 0:ci++;break;
				case 1:cj--;break;
				case 2:ci--;break;
				case 3:cj++;break;
			}
			C = (C + 1) % 4;
		}
		//cout << ans << " | " << ci << " " << cj << " " << fi << " " << fj << " " << endl;
		if(ci == fi && cj == fj){
			cout << ans << endl;
			return 0;
		}
	}
	cout << 0;
	return 0;
}

测试样例发现会在(6,7)的位置擦肩而过

2023/9/7 23:26
加载中...