样例输出50,33分求调
查看原帖
样例输出50,33分求调
750689
CNzzc楼主2024/8/4 22:20
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define up(i,j,k,l) for(int i=j;i<=k;i+=l)
#define down(i,j,k,l) for(int i=j;i>=k;i-=l)
using namespace std;
const int N=20,F=1e4+10;
char a[N][N];
bool f[N][N][N][N][N][N];
int n;
int nx,ny,jx,jy;
const int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1};
int nw,jw;
int t;
void solve()
{
	n=10;
	up(i,0,n+1,1){
		a[0][i]='*';
		a[n+1][i]='*';
		a[i][0]='*';
		a[i][n+1]='*';
	}
	up(i,1,n,1){
		up(j,1,n,1){
			cin>>a[i][j];
			if(a[i][j]=='F'){
				jx=i;
				jy=j;
			}
			if(a[i][j]=='C'){
				nx=i;
				ny=j;
			}
		}
	}
	nw=2;
	jw=2;
	while(true){
		if(nx==jx && ny==jy){
			cout<<t;
			return;
		}
		nx+=dx[nw];
		ny+=dy[nw];
		jx+=dx[jw];
		jy+=dy[jw];
		while(a[nx][ny]=='*'){
			nx-=dx[nw];
			ny-=dy[nw];		
			nw++;
			nw%=4;
			nx+=dx[nw];
			ny+=dy[nw];
		}
		while(a[jx][jy]=='*'){
			jx-=dx[jw];
			jy-=dy[jw];		
			jw++;
			jw%=4;
			jx+=dx[jw];
			jy+=dy[jw];
		}	
		//cout<<nx<<' '<<ny<<' '<<jx<<' '<<jy<<' '<<t<<endl;
		if(f[nx][ny][nw][jx][jy][jw]==true){
			cout<<0;
			return;
		}
		else{
			f[nx][ny][nw][jx][jy][jw]=true;
			t++;
		}
	}
	return;
}
int main()
{
    //ios::sync_with_stdio(false);
	//cin.tie(0);
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}
2024/8/4 22:20
加载中...