📄 usaco_ttwo.cpp
字号:
/*
ID: wangyuc2
PROG: ttwo
LANG: C++
*/
#include <fstream>
#include <iostream>
#include <cstring>
#include <memory>
#include <queue>
using namespace std;
ifstream fin("ttwo.in");
ofstream fout("ttwo.out");
struct Point{
int x,y;
int dir;
};
int main()
{ int maze[12][12];
int i,j,step;
Point farm_now,cow_now,now;
Point d[4]={{-1,0,1},{0,1,1},{1,0,1},{0,-1,-3}};
char ch;
bool check[401][401];
for(i=0;i<401;i++) memset(check[i],false,sizeof(check[i]));
// int farmer,cow;
for(i=0;i<12;i++)
for(j=0;j<12;j++)
{
if(i==0 || j==0 ||i==11 || j==11) maze[i][j]=-1;
else maze[i][j]=0;
}
for(i=1;i<11;i++)
for(j=1;j<11;j++)
{
fin>>ch;
if(ch == '*') maze[i][j]=-1;
else if(ch == 'F') {farm_now.x=i;farm_now.y=j; farm_now.dir=0;}
else if(ch == 'C') {cow_now.x=i;cow_now.y=j;cow_now.dir=0;}
}
// dir=0;
step=0;
now.x=farm_now.dir*100+((farm_now.x-1)*10+farm_now.y);
now.y=cow_now.dir*100+((cow_now.x-1)*10+cow_now.y);
bool flag=false;
while(!check[now.x][now.y] || ch==2)
{
ch=0;
check[now.x][now.y]=true;
if(now.x%100 == now.y%100) {flag=true; break;}
step++;
if(maze[farm_now.x+d[farm_now.dir].x][farm_now.y+d[farm_now.dir].y] != -1)
{
farm_now.x+=d[farm_now.dir].x;
farm_now.y+=d[farm_now.dir].y;
}
else {
if(maze[farm_now.x+d[farm_now.dir].x][farm_now.y+d[farm_now.dir].y]==-1)
{
farm_now.dir+=d[farm_now.dir].dir;
ch++;
// break;
}
// farm_now.x+=d[farm_now.dir].x;
// farm_now.y+=d[farm_now.dir].y;
}
if(maze[cow_now.x+d[cow_now.dir].x][cow_now.y+d[cow_now.dir].y] != -1)
{
cow_now.x+=d[cow_now.dir].x;
cow_now.y+=d[cow_now.dir].y;
}
else {
if(maze[cow_now.x+d[cow_now.dir].x][cow_now.y+d[cow_now.dir].y]==-1)
{
cow_now.dir+=d[cow_now.dir].dir;
ch++;
}
// cow_now.x+=d[cow_now.dir].x;
// cow_now.y+=d[cow_now.dir].y;
}
now.x=farm_now.dir*100+((farm_now.x-1)*10+farm_now.y);
now.y=cow_now.dir*100+((cow_now.x-1)*10+cow_now.y);
}
if(flag) fout<<step<<endl;
else fout<<'0'<<endl;
// system("PAUSE");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -