题意:一个矩形,分成了A*B个大小相同的正方形,把n个机器人放在某些小正方形里,给他们一些指令,他们会一步一步按指令行动,每次只有一个机器人行动。如果两个机器人在同一个小正方形里了他们会相撞;如果出界了,会撞到墙。输出做一些指令之后机器人的第一次相撞的状态。
#include
using namespace std;int map[101][101];
int a,b;struct rob
{int x, y, dre;
} robot[101];struct instruction
{int ro_id, step;char point;
} ins[101];bool proccess ( struct instruction act )
{int i, id &#61; act.ro_id;while ( act.step-- ){if ( act.point &#61;&#61; 1 )robot[id].dre &#61; ( robot[id].dre &#43; 1 ) % 4;else if ( act.point &#61;&#61; -1 ){robot[id].dre -&#61; 1;if ( robot[id].dre &#61;&#61; -1 )robot[id].dre &#61; 3;}else if ( act.point &#61;&#61; 0 ){map[robot[id].x][robot[id].y] &#61; 0;switch ( robot[id].dre ){case 0: robot[id].y &#43;&#43;; break;case 1: robot[id].x --; break;case 2: robot[id].y --; break;case 3: robot[id].x &#43;&#43;; break;}if ( robot[id].y <1 || robot[id].x <1 || robot[id].x > a || robot[id].y > b ){cout <<"Robot " <}int main()
{char ch;int k,n,m;cin >> k;while ( k-- ){memset(map,0,sizeof(map));memset(ins,0,sizeof(ins));cin >> a >> b;cin >> n >> m;int i;for ( i &#61; 1; i <&#61; n; i&#43;&#43; ){cin >> robot[i].x >> robot[i].y >> ch;if ( ch &#61;&#61; &#39;N&#39; )robot[i].dre &#61; 0;else if ( ch &#61;&#61; &#39;W&#39; )robot[i].dre &#61; 1;else if ( ch &#61;&#61; &#39;S&#39; )robot[i].dre &#61; 2;else if ( ch &#61;&#61; &#39;E&#39; )robot[i].dre &#61; 3;map[robot[i].x][robot[i].y] &#61; i;}for ( i &#61; 1; i <&#61; m; i&#43;&#43; ){cin >> ins[i].ro_id >> ch >> ins[i].step;if ( ch &#61;&#61; &#39;L&#39; )ins[i].point &#61; 1;else if ( ch &#61;&#61; &#39;R&#39; )ins[i].point &#61; -1;elseins[i].point &#61; 0;}for ( i &#61; 1; i <&#61; m; i&#43;&#43; ){if ( ! proccess ( ins[i] ) )break;}if ( i > m )cout <<"OK" <}