3984550_ac_32ms_1312k.cc
来自「北大大牛代码 1240道题的原代码 超级权威」· CC 代码 · 共 102 行
CC
102 行
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
char map[1001][1001];
vector <int> xx, yy, dd, vv, tt;
int main()
{
int cas, now;
int w, h, i, j, m;
int dir, v, maxv;
int x, y;
char way[10001];
bool crashed;
int mov[][2] = {{0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}};
scanf("%d", &cas);
for (now = 1; now <= cas; now++, puts(""))
{
printf("Scenario #%d:\n", now);
scanf("%d%d", &w, &h);
for (i = 0; i < h; i++)
{
scanf("%s", map[i]);
}
scanf("%d", &m);
while (m--)
{
xx.clear();yy.clear();
vv.clear();dd.clear();
tt.clear();
crashed = false;
v = 0;
scanf("%d%d%d%d%s", &x, &y, &dir, &maxv, way);
for (i = 0; way[i]; i++)
{
switch (way[i])
{
case 'a':
if (v < maxv) v++;
break;
case 'b':
if (v > 0) v--;
break;
case 'l':
dir--;
if (dir == -1) dir = 7;
break;
case 'r':
dir++;
if (dir == 8) dir = 0;
break;
default:
break;
}
bool slow = false;
for (j = 0; !crashed && j < v; j++)
{
x += mov[dir][0];
y += mov[dir][1];
switch (map[y][x])
{
case '.':
slow = true;
break;
case 'W':
crashed = true;
break;
case 's':
xx.push_back(x);
yy.push_back(y);
dd.push_back(dir);
vv.push_back(v);
tt.push_back(i);
break;
default:
break;
}
}
if (crashed)
{
break;
}
if (slow && v != 0)
{
v = 1;
}
}
printf("%d %d %d %d", x, y, dir, v);
if (crashed) printf(" crashed");
puts("");
for (j = 0; j < xx.size(); j++)
{
printf("crossing startline: %d %d %d %d %d\n", xx[j], yy[j], dd[j], vv[j], tt[j]);
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?