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 + -
显示快捷键?