比赛 练习12 评测结果 AAAAAAAAA
题目名称 两只塔姆沃斯牛 最终得分 100
用户昵称 NVIDIA 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2017-06-30 13:38:05
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#define Turn(x) ((x+1)%4)
#define FLAG {time=0; break;}
using namespace std;
/*char buf[1<<15],*fs,*ft;
inline char getc() {return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
inline int q()
{
    int x=0,f=1; char ch=getc();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getc();}
    while(isdigit(ch)){x=x*10+ch-'0';ch=getc();}return x*f;
}
char mas[1<<15],*FS=mas,*FT=mas+(1<<15);
#define ot(x) (fs==ft?fwrite(mas,1,1<<15,stdout),*(FS=mas)++=x:*FS++=x)
inline void w(int x)
{
    if(x<0) {ot(45);x=-x;}
    static char s[15],*b;b=s;
    if(!x)*b++=48;
    for(;x;*b++=x%10+48,x/=10);
    for(;b--!=s;ot(*b));
}*/
const int dx[4]={-1, 0, 1, 0};
const int dy[4]={ 0, 1, 0,-1};
int vis[20][20][5],map[20][20],i,j,fx,fy,cx,cy,fflg,cflg,fdir=0,cdir=0,time;;
inline void PREDO()
{
	 char stmp[20];for (i=1;i<=10;i++){scanf("%s", stmp);for (j=1;j<=10;j++){if(stmp[j-1]!='*')map[i][j]=1;if(stmp[j-1]=='F')fx=i,fy=j;if(stmp[j-1]=='C')cx=i,cy=j;}}
}
inline int DO()
{
    freopen("ttwo.in" ,"r",stdin);
    freopen("ttwo.out","w",stdout);
    PREDO();
    for (time=0;fx!=cx||fy!=cy;time++)
    {
    	fflg=cflg=0;if (vis[fx][fy][fdir]>100 && vis[cx][cy][cdir]>100)FLAG;
    	vis[fx][fy][fdir]++;vis[cx][cy][cdir]++;
    	for (i=1; i<=4 && !map[fx+dx[fdir]][fy+dy[fdir]] && !fflg; i++) fdir=Turn(fdir), fflg=1;
    	if (i>4) FLAG;
    	for (i=1; i<=4 && !map[cx+dx[cdir]][cy+dy[cdir]] && !cflg; i++) cdir=Turn(cdir), cflg=1;
    	if (i>4) FLAG;
    	if (!fflg) fx+=dx[fdir], fy+=dy[fdir];
    	if (!cflg) cx+=dx[cdir], cy+=dy[cdir];
    }
    printf("%d\n", time);
}
int aa=DO();
int main(){;}