⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1657.cpp

📁 这是哈尔滨工业大学acmOJ的源代码
💻 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 + -