为啥我把o2关了就AC了?开o2反而超时了?
代码:
#include<bits/stdc++.h>
using namespace std;
char mp[12][12];
struct dot{
int x,y;
};
dot human,cow;
int hp=1,cp=1;
dot direct[5]={{0,0},{0,-1},{1,0},{0,1},{-1,0}};
bool walk(dot d,int dirp,char zf){
dot dir=direct[dirp];
if(mp[d.x+dir.x][d.y+dir.y]!='*'){
mp[d.x][d.y]='.';
mp[d.x+dir.x][d.y+dir.y]=zf;
if(zf=='F'){
human.x+=dir.x;
human.y+=dir.y;
}else{
cow.x+=dir.x;
cow.y+=dir.y;
}
return 1;
}else{
if(zf=='F'){
hp+=1;
if(hp>4)hp=1;
}else{
cp+=1;
if(cp>4)cp=1;
}
}
}
int main()
{
for(int i=0;i<=11;i++){
for(int j=0;j<=11;j++){
if(i==0||j==0||i==11||j==11){
mp[j][i]='*';
continue;
}
cin>>mp[j][i];
if(mp[j][i]=='F'){
human.x=j;
human.y=i;
}
if(mp[j][i]=='C'){
cow.x=j;
cow.y=i;
}
}
}
int time=0,df=10000;
while(df--){
time++;
//human
walk(human,hp,'F');
//cow
walk(cow,cp,'C');
if(human.x==cow.x&&human.y==cow.y){
cout<<time;
return 0;
}
}
cout<<0;
return 0;
}