📄 4633573_wa.cpp
字号:
#include<iostream>
using namespace std;
int qipan[105][105];//前面未行,后面未列
int direction[105];//N=1,E=2,S=3,W=4
int placeA[105];
int placeB[105];
int result;
int wuti1,wuti2;
int A,B,n,m;
int getd(char dir)
{
switch(dir)
{
case 'N':return 1;
case 'E':return 2;
case 'S':return 3;
case 'W':return 4;
}
return -1;
}
void test_out()
{
for(int count=B;count>=1;count--)
{
for(int count2=1;count2<=A;count2++) cout<<qipan[count2][count]<<" ";
cout<<endl;
}
for(int i=1;i<=n;i++) cout<<direction[i]<<" ";
cout<<endl;
}
bool doit(int root,char action,int repeat)
{
int count;
int temp;
switch(action)
{
case 'L':direction[root]-=repeat;direction[root]%=4;if(direction[root]<0)direction[root]+=4;return true;
case 'R':direction[root]+=repeat;direction[root]%=4;return true;
case 'F':
switch(direction[root])
{
case 1:temp=placeB[root]+repeat;//N
for(count=placeB[root]+1;count<=temp;count++)
{
if(count>B) {result=1;wuti1=root;return false;}
if(qipan[placeA[root]][count]!=0)
{
result=2;
wuti1=root;
wuti2=qipan[placeA[root]][count];
return false;
}
}
qipan[placeA[root]][placeB[root]]=0;
qipan[placeA[root]][temp]=root;
placeB[root]=temp;
return true;
case 2:temp=placeA[root]+repeat;//E
for(count=placeA[root]+1;count<=temp;count++)
{
if(count>A) {result=1;wuti1=root;return false;}
if(qipan[count][placeB[root]]!=0)
{
result=2;
wuti1=root;
wuti2=qipan[count][placeB[root]];
return false;
}
}
qipan[placeA[root]][placeB[root]]=0;
qipan[temp][placeB[root]]=root;
placeA[root]=temp;
return true;
case 3:temp=placeB[root]-repeat;//S
for(count=placeB[root]-1;count>=temp;count--)
{
if(count<=0) {result=1;wuti1=root;return false;}
if(qipan[placeA[root]][count]!=0)
{
result=2;
wuti1=root;
wuti2=qipan[placeA[root]][count];
return false;
}
}
qipan[placeA[root]][placeB[root]]=0;
qipan[placeA[root]][temp]=root;
placeB[root]=temp;
return true;
case 4:temp=placeA[root]-repeat;//W
for(count=placeA[root]-1;count>=temp;count--)
{
if(count<=0) {result=1;wuti1=root;return false;}
if(qipan[count][placeB[root]]!=0)
{
result=2;
wuti1=root;
wuti2=qipan[count][placeB[root]];
return false;
}
}
qipan[placeA[root]][placeB[root]]=0;
qipan[temp][placeB[root]]=root;
placeA[root]=temp;
return true;
}
}
return false;
}
void out()
{
if(result==1) cout<<"Robot "<<wuti1<<" crashes into the wall\n";
if(result==2) cout<<"Robot "<<wuti1<<" crashes into robot "<<wuti2<<"\n";
}
int main()
{
int testnumber;
cin>>testnumber;
for(int count=1;count<=testnumber;count++)
{
cin>>A>>B;//A为行,B为列
cin>>n>>m;
memset(qipan,0,sizeof(qipan));
for(int count2=1;count2<=n;count2++)
{
int a,b;
char dir;
cin>>a>>b>>dir;
qipan[a][b]=count2;
placeA[count2]=a;
placeB[count2]=b;
direction[count2]=getd(dir);
}
bool need=true;
bool ok=true;;
for(int count3=1;count3<=m;count3++)
{
int boot,repeat;
char action;
cin>>boot>>action>>repeat;
if(need)
{
if(!doit(boot,action,repeat)) {need=false;ok=false;}
}
// test_out();
// cout<<ok<<endl;
}
if(ok) cout<<"OK"<<endl;
else out();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -