CSP.ac低仿机器人(T1-1)

低仿机器人(T1-1)
如果看不了请登入,如果还看不了就是你没去qbxt

有这么几个问题要注意

1> 注意指令参数
2> 注意是上一步操作不是上一步,就是WG走了三步然后撞死了,不是走了两步的那个位置,是这个操作执行前的位置
3> 还有一些问题在写的时候注意一下就行了(代码最后有400行的自造数据,可以自己试一下,应该基本包含了全部的细节)

\(Code\)

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <stack>

#define int long long
#define rr register

#define MAXN 100010
#define inf 1e18

using namespace std;

inline int read() {
	int s = 0, f = 0;
	char ch = getchar();
	while (!isdigit(ch)) {if (ch == '\n') break; f |= ch == '-'; ch = getchar();}
	while (isdigit(ch)) {s = s * 10 + (ch ^ 48); ch = getchar();}
	return f ? -s : s;
}

int T, n, m, x, y, a, b, c, k, opt;

int paotai, jiqiren, bazix;

bool fEND = 0, rio = 0;

stack <int> S;

int math[210][210], bazi[210][210];

inline void init() {
	memset(math, 0, sizeof math);
	memset(bazi, 0, sizeof bazi);
	fEND = 0;
	rio = 0;
	paotai = 0;
	jiqiren = 0;
	bazix = 0;
	while (S.size()) S.pop();
}

inline void stepFE(int sjd);

inline void stepWG(int step);

signed main() {
	cin >> T;
	while (T--) {
		init();
		cin >> n >> m;
		for (rr int i = 1; i <= n; i++)
			for (rr int j = 1; j <= m; j++) {
				cin >> math[i][j];
				if (math[i][j] == 2) bazi[i][j] = 2;
			}
		for (rr int i = 1; i <= n; i++) math[i][0] = 1;
		for (rr int i = 1; i <= m; i++)	math[0][i] = 1;
		for (rr int i = 1; i <= n; i++)	math[i][m + 1] = 1;
		for (rr int i = 1; i <= m; i++)	math[n + 1][i] = 1;
		cin >> x >> y >> a >> b >> c >> k; 	
		x++;
		y++;
		for (rr int i = 1; i <= k; i++) {
			// if (math[x][y]) fEND = 1;
			string stp;
			if (fEND) {
				getchar();
				getline(cin, stp);
				continue;
			} 
			cin >> stp;
			double op;
			if (stp == "FT") {
				cin >> op;
				if (op != (int)op) {
					fEND = 1;
					continue;
				}
				int opt = (int)op;
				if (opt < 0 || opt > 1)  {
					fEND = 1;
					continue;
				}
				if (opt == 0) paotai = (paotai + 1) % 4;
				else {
					paotai--;
					if (paotai < 0)
						paotai = (paotai + 4) % 4;
				}
			}
			else if (stp == "FF") {
				cin >> op;				
				if (op != (int)op) {
					fEND = 1;
					continue;
				}
				int opt = (int)op;
				if (opt < 0 || opt > 1)  {
					fEND = 1;
					continue;
				}
				if (opt == 1) {
					if (b == 0) continue;
					if (S.size() == a) { fEND = 1; continue;}
					b--, S.push(2);
				} 
				else {
					if (c == 0) continue;
					if (S.size() == a) { fEND = 1; continue;}
					c--, S.push(1);
				} 
			}
			else if (stp == "FE") {
				int q = 0;
				if (S.size()) {
					q = S.top();
					S.pop();
				}
				stepFE(q);	
			}
			else if (stp == "WT") {
				cin >> op;
				if (op != (int)op) {
					fEND = 1;
					continue;
				}
				int opt = (int)op;
				if (opt < 0 || opt > 1)  {
					fEND = 1;
					continue;
				}
				if (opt == 0) jiqiren = (jiqiren + 1) % 4;
				else {
					jiqiren--;
					if (jiqiren < 0)
						jiqiren = (jiqiren + 4) % 4;
				}
			}
			else if (stp == "WG") {
				cin >> op;
				if (op != (int)op) {
					fEND = 1;
					continue;
				}
				int opt = (int)op;
				if (opt < 0 || opt >= (max(m, n)))  {
					fEND = 1;
					continue;
				}
				stepWG(opt);
			}
			else if (stp == "END") {
				fEND = 1;
				rio = 1;
			}
		}
		if (rio) cout << "Complete" << "\n";
		else cout << "ERROR" << "\n";
		cout << x - 1 << " " << y - 1 << "\n";
		cout << bazix << "\n";
		cout << paotai << " " << jiqiren << " " << b << " " << c << "\n";
	}
}

inline void stepFE(int sjd) {
	int xx = x, yy = y;
	if (paotai == 0) {
		while (math[xx][yy] != 1) {
			if (math[xx][yy] == 2) {
				bazi[xx][yy] -= sjd;
				if (bazi[xx][yy] <= 0) {
					math[xx][yy] = 0;
					bazix++;
				}
				break;
			}
			xx--;
		}
	}
	if (paotai == 1) {
		while (math[xx][yy] != 1) {
			if (math[xx][yy] == 2) {
				bazi[xx][yy] -= sjd;
				if (bazi[xx][yy] <= 0) {
					math[xx][yy] = 0;
					bazix++;
				}
				break;
			}
			yy--;
		}
	}
	if (paotai == 2) {
		while (math[xx][yy] != 1) {
			if (math[xx][yy] == 2) {
				bazi[xx][yy] -= sjd;
				if (bazi[xx][yy] <= 0) {
					math[xx][yy] = 0;
					bazix++;
				}
				break;
			}
			xx++;
		}
	}
	if (paotai == 3) {
		while (math[xx][yy] != 1) {
			if (math[xx][yy] == 2) {
				bazi[xx][yy] -= sjd;
				if (bazi[xx][yy] <= 0) {
					math[xx][yy] = 0;
					bazix++;
				}
				break;
			}
			yy++;
		}
	}
}

inline void stepWG(int step) {
	int xx = x ,yy = y;
	if (jiqiren == 0) {
		while (step) {
			x--;
			step--;
			if (math[x][y] != 0) {
				fEND = 1;
				break;
			}
		}
	}
	if (jiqiren == 1) {
		while (step) {
			y--;
			step--;
			if (math[x][y] != 0) {
				fEND = 1;
				break;
			}
		}
	}
	if (jiqiren == 2) {
		while (step) {
			x++;
			step--;
			if (math[x][y] != 0) {
				fEND = 1;
				break;
			}
		}
	}
	if (jiqiren == 3) {
		while (step) {
			y++;
			step--;
			if (math[x][y] != 0) {
				fEND = 1;
				break;
			}
		}
	}
	if (fEND) {
		x = xx;
		y = yy;
	}
}

数据

/*
4
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
FF 1
FE
END
FF
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
FE
END
FF
FF
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
WG 1
FE
END
FF
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
FF 1
FT 0
FT 0
FT 0
*/
/*
5
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
WG 1
FE
END
FF
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
WG 1
FE
END
FF
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
WG 1
FE
END
FF
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
WG 1
FE
END
FF
5 5
2 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
4 4 3 1 1 6
WG 4
FT 0
WG 1
FE
END
FF
*/



/*
2
4 4
2 0 0 0
0 0 1 0
0 0 0 0
0 0 0 0
3 0 1 2 2 3
FF 1
FF 1
FE
4 4
2 0 0 0
0 0 1 0
0 0 0 0
0 0 0 0
3 2 2 1 1 3
WG 2
FT 0
FT 0

ERROR
3 0
0
0 0 0 2
ERROR
2 2
0
0 0 1 1

*/

/*
1
4 4
2 2 2 2
2 2 2 2
2 2 2 2
2 2 2 0
3 3 1 1 1 7
FT 0
WT 0
FF 1
FE
WG 1
WG 1
END
*/

/*
2
4 4
2 0 0 0
3 0 1 0
3 0 0 0
0 0 0 0
3 0 2 2 2 3
FF 1
FE
END
4 4
2 0 0 0
3 0 1 0
3 0 0 0
0 0 0 0
3 0 2 2 2 4
FF 0
FF 0
FE
FE
*/

/*
1
4 4
0 0 1 0
3 2 3 0
3 2 2 2
2 1 3 0
3 3 2 2 2 11
FF 1
FE
WG 2
FT 0
FF 0
FF 0
FE
FE
WT 0
WG 2
END
*/

/*
1
4 4
0 0 2 0
3 2 3 0
3 2 2 2
2 1 3 0
3 3 2 2 2 20
FF 1
FE
WG 2
FT 0
FF 0
FF 0
FE
FE
WT 0
WT 1
WG 1
FF 1
FE
WT 0
WG 2
WT 1
WT 1
WG 1
WG 2
END
*/

/*
1
5 5
2 2 2 2 2
2 0 0 2 2
2 0 0 2 2
2 2 2 2 2
0 0 0 0 0
4 4 5 10 12 20
WT 0
WG 4
FF 1
FF 1
FF 1
FE
FE
FE
WT 1
WG 3
FF 1
FE
WT 1
FT 1
FF 0
FF 0
FE
FE
WG 3
END
*/

/*

1
5 5
2 2 2 2 2
2 0 3 2 2
2 0 0 2 2
2 2 2 2 2
0 0 0 0 0
4 4 5 10 12 20
WT 0
WG 4
FF 1
FF 1
FF 1
FE
FE
FE
WT 1
WG 3
FF 1
FE
WT 1
FT 1
FF 0
FF 0
FE
FE
WG 3
END
*/

/*
1
4 2
0 0
0 0
0 0
2 0
0 0 5 5 5 12
WT 0
WT 0
FT 0
FT 0
FE
FF 1
FF 0
FF 1
FF 0
FE
WG 2
FE
*/


/*
1
4 3
0 0 0
0 3 0
3 0 0
0 0 0
3 0 1 1 1 7
WT 1
WG 2
WT 0
WG 1
WG 1
WT 0
WG 1
*/

/*
1
5 5
2 2 2 2 2
2 2 3 2 2
1 2 3 2 2
1 2 2 3 2
1 1 1 1 0
4 4 5 40 40 45
FF 1
FF 1
FF 1
FF 1
FF 1
FE
FE
FE
FE
WG 2
FT 0
FE
WG 2
FF 1
FF 0
FF 0
FE
FE
FE
WT 0
WG 2
FT 0
FE
FE
FF 1
FF 1
FE
FE
FT 1
FF 1
FF 1
FF 1
FF 0
FF 0
FE
FE
WG 1
FT 0
FE
FE
FE
WT 0
WG 3
WG 1
END
*/

/*
2
2 3
2 0 0
0 0 1
1 0 2 1 1 8
FF 1
FE
WG 1
WT 1
WG 2
WT 1
WG 1
END
2 3
2 0 0
0 0 1
1 0 2 1 1 8
FF 1
FE
WG 1
WT 1
WG 2
WT 1
END
WG 1
*/

/*
2
2 2
0 0
0 0
0 0 1 1 1 2
FF
END
*/
posted @ 2020-04-28 06:13  Aliemo  阅读(296)  评论(0编辑  收藏  举报