| ||||||||||
| 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 | |||||||||
我发现我的代码越来越有美感了。。。~~层次分明的代码就是容易1A#include <cstdio>
using namespace std;
const int N = 105;
struct rob
{
int x, y, d;
}rob[N];
struct move
{
int id, tap, times;
}ms[N];
int on[N][N];
int t, m, n, nums, moves;
void input()
{
scanf("%d %d", &m, &n);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
on[i][j] = 0;
char c;
scanf("%d %d", &nums, &moves);
for (int i = 1; i <= nums; ++i)
{
scanf("%d %d %c", &rob[i].y, &rob[i].x, &c);
on[rob[i].x][rob[i].y] = i;
switch(c)
{
case 'S':rob[i].d = 0;break;
case 'E':rob[i].d = 1;break;
case 'N':rob[i].d = 2;break;
case 'W':rob[i].d = 3;break;
}
}
for (int i = 1; i <= moves; ++i)
{
scanf("%d %c %d", &ms[i].id, &c, &ms[i].times);
switch(c)
{
case 'L':ms[i].tap = 1;break;
case 'R':ms[i].tap = 2;break;
case 'F':ms[i].tap = 3;break;
}
}
}
void output(int one, int two, int w)
{
if (w == 1)
printf("Robot %d crashes into the wall\n", one);
else
printf("Robot %d crashes into robot %d\n", one, two);
}
bool move(int id, int inx, int iny, int times)
{
int x = rob[id].x;
int y = rob[id].y;
on[x][y] = 0;
for (int i = 0; i < times; ++i)
{
x += inx;
y += iny;
if (x < 1 || x > n || y < 1 || y > m)
{
output(id, 0, 1);
return false;
}
if (on[x][y] != 0)
{
output(id, on[x][y], 2);
return false;
}
}
on[x][y] = id;
rob[id].x = x;
rob[id].y = y;
return true;
}
bool change(int id, int tap, int times)
{
switch(tap)
{
case 1:rob[id].d = (rob[id].d + times) % 4;break;
case 2:rob[id].d = (rob[id].d + 3 * times) % 4;break;
case 3:
switch(rob[id].d)
{
case 0:
if (!move(id, -1, 0, times))
return false;
break;
case 1:
if (!move(id, 0, 1, times))
return false;
break;
case 2:
if (!move(id, 1, 0, times))
return false;
break;
case 3:
if (!move(id, 0, -1, times))
return false;
break;
}
break;
}
return true;
}
void solve()
{
for (int i = 1; i <= moves; ++i)
if (!change(ms[i].id, ms[i].tap, ms[i].times))
return;
puts("OK");
}
int main()
{
scanf("%d", &t);
while (t--)
{
input();
solve();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator