题目很简答就是一个大模拟啊,可是我却敲了整整两天啊、、、sad的是竟然还是错了啊,10000+的代码啊,死的心都有了啊,后来看到大神的代码简单明了啊,突然发现要学习的东东太多了啊!这些都是经验啊,我还在傻了吧唧的重复啊,他们直接很简单的就解决了啊,一定得好好的学习一下啊!这就是经验啊,哎。。菜鸟明显不给力啊!
这是我写的,错了啊。只能过掉样例,过不了discuss里面的数据啊、、、、、
虽然折腾了两天有点浪费时间,但是让我印象深刻啊,下次一定要注意啊,水题中成长啊、、、
#include <stdio.h>
#include <string.h>
struct p
{
int x, y, f;
} num[1010];
struct q
{
int id, tap, step;
} order[110];
int main()
{
int t, n, m, a, b, i, flat;
int dp[110][110];
char s;
scanf("%d",&t);
while(t--)
{
flat = 0;
memset(dp , 0 , sizeof(dp));
scanf("%d %d",&a, &b);
scanf("%d %d",&n, &m);
for(i = 0; i < n; i++)
{
scanf("%d %d %c",&num[i].x, &num[i].y, &s);
dp[num[i].y][num[i].x] = i+1;
if(s == 'N')
num[i].f = 1;
else if(s == 'S')
num[i].f = 2;
else if(s == 'W')
num[i].f = 3;
else if(s == 'E')
num[i].f = 4;
}
for(i = 0; i < m; i++)
{
scanf("%d %c %d",&order[i].id, &s, &order[i].step);
if(s == 'L')
order[i].tap = 1;
else if(s == 'R')
order[i].tap = 2;
else if(s == 'F')
order[i].tap = 3;
}
for(i = 0; i < m; i++)
{
if(order[i].tap == 1)
{
if(num[order[i].id-1].f == 1)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 1;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 4;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 2;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 3;
}
else if(num[order[i].id-1].f == 2)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 2;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 3;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 1;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 4;
}
else if(num[order[i].id-1].f == 3)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 3;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 2;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 4;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 1;
}
else if(num[order[i].id-1].f == 4)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 4;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 1;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 3;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 2;
}
}
else if(order[i].tap == 2)
{
if(num[order[i].id-1].f == 1)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 1;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 3;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 2;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 4;
}
else if(num[order[i].id-1].f == 2)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 2;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 4;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 1;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 3;
}
else if(num[order[i].id-1].f == 3)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 3;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 1;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 4;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 2;
}
else if(num[order[i].id-1].f == 4)
{
if(order[i].step % 4 == 0)
num[order[i].id-1].f = 4;
else if(order[i].step % 4 == 1)
num[order[i].id-1].f = 2;
else if(order[i].step % 4 == 2)
num[order[i].id-1].f = 3;
else if(order[i].step % 4 == 3)
num[order[i].id-1].f = 1;
}
}
else if(order[i].tap == 3)
{
if(num[order[i].id-1].f == 1)
{
for(int j = 1; j <= order[i].step; j++)
{
if(num[order[i].id-1].x+j > b)
{
flat = 1;
printf("Robot %d crashes into the wall\n",order[i].id);
break;
}
if(dp[num[order[i].id-1].x+j][num[order[i].id-1].y] != 0)
{
flat = 1;
printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x+j][num[order[i].id-1].y]);
break;
}
}
if(flat == 1)
break;
else
{
dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0;
num[order[i].id-1].x += order[i].step;
dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id;
}
}
else if(num[order[i].id-1].f == 2)
{
for(int j = 1; j <= order[i].step; j++)
{
if(num[order[i].id-1].x-j < 0)
{
flat = 1;
printf("Robot %d crashes into the wall\n",order[i].id);
break;
}
if(dp[num[order[i].id-1].x-j][num[order[i].id-1].y] != 0)
{
flat = 1;
printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x-j][num[order[i].id-1].y]);
break;
}
}
if(flat == 1)
break;
else
{
dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0;
num[order[i].id-1].x -= order[i].step;
dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id;
}
}
else if(num[order[i].id-1].f == 3)
{
for(int j = 1; j <= order[i].step; j++)
{
if(num[order[i].id-1].x-j <= 0)
{
flat = 1;
printf("Robot %d crashes into the wall\n",order[i].id);
break;
}
if(dp[num[order[i].id-1].y-j][num[order[i].id-1].x] != 0)
{
flat = 1;
printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].y][num[order[i].id-1].x-j]);
break;
}
}
if(flat == 1)
break;
else
{
dp[num[order[i].id-1].y][num[order[i].id-1].x] = 0;
num[order[i].id-1].x -= order[i].step;
dp[num[order[i].id-1].y][num[order[i].id-1].x] = order[i].id;
}
}
else if(num[order[i].id-1].f == 4)
{
for(int j = 1; j <= order[i].step; j++)
{
if(num[order[i].id-1].y+j > a)
{
flat = 1;
printf("Robot %d crashes into the wall\n",order[i].id);
break;
}
if(dp[num[order[i].id-1].x][num[order[i].id-1].y+j] != 0)
{
flat = 1;
printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x][num[order[i].id-1].y+j]);
break;
}
}
if(flat == 1)
break;
else
{
dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0;
num[order[i].id-1].y += order[i].step;
dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id;
}
}
}
}
if(flat == 0)
printf("OK\n");
}
return 0;
}
这是跟大神学习的啊,这个可以AC的
#include <stdio.h>
#include <string.h>
#define MAX 105
int dx[4] = {0, -1, 0, 1}, dy[4] = {1, 0, -1, 0};
int a, b, n, m, map[MAX][MAX], sta[MAX][3];
int dir(char c)
{
switch(c)
{
case 'N':
return 0;
case 'W':
return 1;
case 'S':
return 2;
default:
return 3;
}
}
int main()
{
int T, i, j, x, y, suc;
char ts[5];
scanf("%d", &T);
while(T--)
{
memset(map, 0, sizeof(map));
scanf("%d%d%d%d", &a, &b, &n, &m);
for(i = 1; i <= n; i++)
{
scanf("%d%d%s", &x, &y, ts);
map[x][y] = i;
sta[i][0] = x, sta[i][1] = y, sta[i][2] = dir(ts[0]);
}
suc = 1;
while(m--)
{
scanf("%d%s%d", &i, ts, &j);
while(j-- && suc)
switch(ts[0])
{
case 'L':
sta[i][2] = (sta[i][2] + 1) % 4;
break;
case 'R':
sta[i][2] = (sta[i][2] + 3) % 4;
break;
default:
map[sta[i][0]][sta[i][1]] = 0;
x = sta[i][0] += dx[sta[i][2]];
y = sta[i][1] += dy[sta[i][2]];
if(!x || x > a || !y || y > b)
{
printf("Robot %d crashes into the wall\n", i);
suc = 0;
}
else if(map[x][y])
{
printf("Robot %d crashes into robot %d\n", i, map[x][y]);
suc = 0;
}
else
map[x][y] = i;
break;
}
}
if(suc)
printf("OK\n");
}
return 0;
}