usaco2.4.2两只塔姆沃斯牛

来源:互联网 发布:热门交友软件排行 编辑:程序博客网 时间:2024/06/03 16:43

注意最大的时间,如果盲目开大一点,只会超时,所以要掐地刚刚好,每个格子对于每个人最多有4次到达机会,分别为方向不同时的四个。总共有100个格子,对于每个人就是400次,对于两个人,就是400*400=160000,把握范围味就行了。


#include<iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int map[12][12],kk=0;
struct didian{int x;int y;int fang;};
didian niu,ren;
void aaa(void);
int main()
{
  freopen("ttwo.in","r",stdin);
  freopen("ttwo.out","w",stdout);
  for(int i=1;i<=10;i++)
  for(int j=1;j<=10;j++){
    char ch;
    cin>>ch;
    if(ch=='.'){map[i][j]=1;}
    else if(ch=='F'){ren.x=i;ren.y=j;map[i][j]=1;}
    else if(ch=='C'){niu.x=i;niu.y=j;map[i][j]=1;}
  }
   while(kk<=160000){
    if(niu.fang==0)
    {
       if(map[niu.x-1][niu.y]==1)niu.x--;
       else niu.fang++;
    }
    else if(niu.fang==1)
    {
       if(map[niu.x][niu.y+1]==1)niu.y++;
       else niu.fang++;
    }
    else if(niu.fang==2)
    {
       if(map[niu.x+1][niu.y]==1)niu.x++;
       else niu.fang++;
    }
    else if(niu.fang==3)
    {
       if(map[niu.x][niu.y-1]==1)niu.y--;
       else niu.fang=0;
    }
    if(ren.fang==0)
    {
       if(map[ren.x-1][ren.y]==1)ren.x--;
       else ren.fang++;
    }
    else if(ren.fang==1)
    {
       if(map[ren.x][ren.y+1]==1)ren.y++;
       else ren.fang++;
    }
    else if(ren.fang==2)
    {
       if(map[ren.x+1][ren.y]==1)ren.x++;
       else ren.fang++;
    }
    else if(ren.fang==3)
    {
       if(map[ren.x][ren.y-1]==1)ren.y--;
       else ren.fang=0;
    }
    kk++;
    if(niu.x==ren.x&&niu.y==ren.y){cout<<kk<<endl;return 0;}
   }
   cout<<0<<endl;
return 0;
}

0 0
原创粉丝点击