| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
太恶心了,终于AC#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100+5;
typedef pair<int,int>PII;
int m,n;
int a,b;
char left1[]="SENW";
char right1[]="SWNE";
PII robot[maxn];
PII rob;
char first[]="EWNS";
char end1[]="SNEW";
char s[maxn];
int move[maxn];
int time[maxn];
char field[maxn];
bool crash(int x,int k,int t) //x为机器人
{
for(int i=1;i<=a;i++)
if(i!=x)
{
if(robot[i].first==k&&robot[i].second==t) {
rob.first=x;
rob.second=i;
return false;
}
}
if(k<1||k>m||t<1||t>n) return false;
return true;
}
bool mine(int k,char c,int t)
{
if(c=='F') {
if(s[k]=='N') {
for(int i=1;i<=t;i++)
{
robot[k].first--;
bool pos=crash(k,robot[k].first,robot[k].second);
if(!pos) return false;
}
}
else if(s[k]=='S') {
for(int i=1;i<=t;i++)
{
robot[k].first++;
bool pos=crash(k,robot[k].first,robot[k].second);
if(!pos) return false;
}
}
else if(s[k]=='W') {
for(int i=1;i<=t;i++)
{
robot[k].second--;
bool pos=crash(k,robot[k].first,robot[k].second);
if(!pos) return false;
}
}
else if(s[k]=='E') {
for(int i=1;i<=t;i++)
{
robot[k].second++;
bool pos=crash(k,robot[k].first,robot[k].second);
if(!pos) return false;
}
}
}
else if(c=='L') {
int i;
for(i=0;i<4;i++)
if(s[k]==left1[i]) break;
s[k]=left1[(i+t)%4];
}
else if(c=='R') {
int i;
for(i=0;i<4;i++)
if(s[k]==right1[i]) break;
s[k]=right1[(i+t)%4];
}
return true;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
rob=PII(0,0);
scanf("%d%d",&m,&n);
scanf("%d%d",&a,&b);
int x,y;
char dir;
for(int i=0;i<a;i++)
{
int j;
cin>>x>>y>>dir;
for(j=0;j<4;j++)
if(first[j]==dir) break;
s[i+1]=end1[j];
robot[i+1].first=x;
robot[i+1].second=y;
}
int c,d;
char rep;
for(int i=0;i<b;i++)
{
cin>>c>>rep>>d;
move[i]=c;
field[i]=rep;
time[i]=d;
}
int i;
for(i=0;i<b;i++)
{
bool z=mine(move[i],field[i],time[i]);
//bool z=crash(move[i]);
if(!z) break;
}
if(i==b) cout<<"OK"<<endl;
else if(rob.first==0) printf("Robot %d crashes into the wall\n",move[i]);
else printf("Robot %d crashes into robot %d\n",rob.first,rob.second);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator