📄 1657.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1657 on 2006-02-26 at 19:50:15 */
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAX = 1024;
const int DIR[][2] = { { -1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 }, { 1, 0 }, { 1, -1 }, { 0, -1 }, { -1, -1 } };
char map[MAX][MAX];
int w, h;
class Hit {
private:
int x, y, d, speed, rn;
public:
void set(int, int, int, int, int);
void print() const;
};
void Hit::set(int cx, int cy, int cd, int cv, int r) {
x = cx; y = cy; d = cd; speed = cv; rn = r;
}
void Hit::print() const {
printf("crossing startline: %d %d %d %d %d\n", y, x, d, speed, rn);
}
int main()
{
int i, j, t, T;
Hit hit[MAX];
char com[MAX];
scanf("%d", &T);
for(t = 1; t <= T; t++) {
scanf("%d %d\n", &w, &h);
for(i = 0; i < h; i++) gets(map[i]);
printf("Scenario #%d:\n", t);
int r, R;
scanf("%d", &R);
for(r = 0; r < R; r++) {
int x, y, d, m, v, hn; bool crash = false;
scanf("%d %d %d %d\n", &y, &x, &d, &m); gets(com);
for(v = hn = i = 0; com[i] != 0 && !crash; i++) {
switch(com[i]) {
case 'l': d = (d-1)&7; break;
case 'r': d = (d+1)&7; break;
case 'a': v = min(v+1, m); break;
case 'b': v = max(v-1, 0); break;
}
bool mud = false;
for(j = 0; j < v; j++) {
x += DIR[d][0]; y += DIR[d][1];
if(map[x][y] == 'W') { crash = true; break; }
else if(map[x][y] == 's') hit[hn++].set(x, y, d, v, i);
else if(map[x][y] == '.') mud = true;
}
if(mud && !crash) v = 1;
}
printf("%d %d %d %d%s\n", y, x, d, v, crash ? " crashed" : "");
for(i = 0; i < hn; i++) hit[i].print();
}
putchar('\n');
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -