USACO The Tamworth Two
2014-09-01 12:25
302 查看
一个很直观的想法,分别模拟羊和FJ的路径,记录时间三维数组,i,j,k表示走到第i行第j列方向为k的时间,之后只要分别判断每个格子的时间是否可以相等就OK了,
关键是怎么停下来,先想到的是一共有400种走法,即i(10)*j(10)*k(4),但是在想一下就发现只要把初始时间设为1,判断下一个是否为0即可,然后需分4种情况讨论两个时间是否可以相等,注意不要判断无法到达的点。
关键是怎么停下来,先想到的是一共有400种走法,即i(10)*j(10)*k(4),但是在想一下就发现只要把初始时间设为1,判断下一个是否为0即可,然后需分4种情况讨论两个时间是否可以相等,注意不要判断无法到达的点。
/* ID: jinusac1 PROG: ttwo LANG: C++ */ #include <iostream> #include <cstdio> #include <cstring> using namespace std; int rf[12][12][4]={0},rc[12][12][4],d[4][2]={-1,0,0,1,1,0,0,-1}; char h[12][12]; bool mark[410]; int main() { freopen("ttwo.in","r",stdin); freopen("ttwo.out","w",stdout); int fi,fj,ci,cj; memset(h,'*',sizeof(h)); for(int i=1;i<=10;i++){ int j=1; char t; while((t=getchar())!='\n'){ h[i][j]=t; if(t=='F') {fi=i;fj=j;h[i][j]='.';} if(t=='C') {ci=i;cj=j;h[i][j]='.';} j++; } } int t=1,dir=0,Tf=0,Tc=0,sf=0,sc=0; while(true){ rf[fi][fj][dir]=t; if(h[fi+d[dir][0]][fj+d[dir][1]]=='*') dir=(dir+1)%4; else {fi+=d[dir][0];fj+=d[dir][1];} if(rf[fi][fj][dir]){ sf=rf[fi][fj][dir]; Tf=t-rf[fi][fj][dir]+1; break; } t++; } t=1;dir=0; while(true){ rc[ci][cj][dir]=t; if(h[ci+d[dir][0]][cj+d[dir][1]]=='*') dir=(dir+1)%4; else {ci+=d[dir][0];cj+=d[dir][1];} if(rc[ci][cj][dir]){ sc=rc[ci][cj][dir]; Tc=t-rc[ci][cj][dir]+1; break; } t++; } int rmin=100000; for(int i=1;i<=10;i++) for(int j=1;j<=10;j++){ if(h[i][j]=='*') continue; for(int k2=0;k2<4;k2++) for(int k1=0;k1<4;k1++){ int a=rf[i][j][k1],b=rc[i][j][k2]; if(a==0||b==0) continue; if(a<sf&&b<sc){ if(a==b) rmin=rmin>a?a:rmin; else continue; } else if(a>=sf&&b<sc){ while(a<=b){ if(a==b) rmin=rmin>a?a:rmin; a+=Tf; } continue; } else if(a<sf&&b>=sc){ while(a>=b){ if(a==b) rmin=rmin>a?a:rmin; b+=Tc; } } else{ memset(mark,false,sizeof(mark)); while(a<=400) {mark[a]=true;a+=Tf;} while(b<=400){ if(mark[b]){ rmin=rmin>b?b:rmin; break; } b+=Tc; } } if(rmin==49) cout<<i<<" "<<j<<endl; } } if(rmin==100000) cout<<0<<endl; else cout<<rmin-1<<endl; return 0; }
相关文章推荐
- USACO2.4.1 The Tamworth Two (ttwo)
- USACO The Tamworth Two
- USACO 2.4 The Tamworth Two ttwo
- USACO--2.4The Tamworth Two
- USACO - Chapter2 Section 2.4 - The Tamworth Two
- 水题其实也能反映思维的严谨性:USACO The Tamworth Two
- USACO-The Tamworth Two
- 【USACO 2.4】The Tamworth Two
- 【USACO题库】2.4.1 The Tamworth Two两只塔姆沃斯牛
- USACO section 2.4 The Tamworth Two(算模拟吧)
- USACO 2.4.1 The Tamworth Two
- USACO section 2.4 The Tamworth Two(算模拟吧)
- USACO section2.4 The Tamworth Two题解&代码
- USACO Section 2.4: The Tamworth Two
- USACO The Tamworth Two 模拟
- USACO2.4.1 The Tamworth Two (ttwo)
- 【其他】【USACO】The Tamworth Two
- usaco The Tamworth Two
- USACO 2.4.1 The Tamworth Two
- USACO2.4 The Tamworth Two[模拟]