CSP.AC#6 低配機器人

心路歷程

cnmcnmcnmcnmcnmcnmcnmcnmcnmcnmcnmcnm
我的代碼被lzx和lkp大佬調,一個勁的出數據
然後把他們自己AC代碼卡掉, 然後我自己10分代碼還沒被卡
我:#*()@&¥#@真nm有趣.

到最後還是讀題的問題,我真的一臉懵逼
這個題一開始的時候,圖是從00開始還是11開始就沒說
真的就是摳字眼,建議做一下 磨 煉 心 態

思路

判斷標識錯誤的時候,什麼都不和你說
然後會給你出小數和不在範圍內的數,這種數一律按照error處理
還有他給你的機器人走的步數會有0,所以如果你一開始不判斷的話就會炸(我就是這裏,紀念一下)
一開始的時候我把第一個if放到了最下邊,然後我就沒了,我真的無語,cao

int bu = 0;
while (1) {
    if (bu == x) break;
    s--, bu++;
    if (s < 0) { flag = 1, s += bu; return 1; }
    if (tu[s][t] != 0) { flag = 1, s += bu; return 1; }
}

總之,細節有億點點, 注意細節就行了.不想多說話(又雙叒叕浪費了一天,我去,吐了)

code

/*
	time:2020.4.26
	Auther:_Destiny
*/
#include <bits/stdc++.h>
#define ll long long
#define N 100010
#define M 210

using namespace std;
int T, n, m, s, t;
int tu[M][M], paochao, renchao, h;
int arong, dajing, xiaojing, k, flag, f1 = 1;
string opt; stack<int> a;//彈夾 
int ma[M][M];//在i,j處的靶子的生命值 

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

void init() {//初始化清理 
	flag = 0, f1 = 1, h = 0, s = 0, t = 0, arong = 0;
	paochao = 0, renchao = 0, dajing = 0, xiaojing = 0;
	while (!a.empty()) a.pop();
	memset(tu, 0, sizeof tu);
	memset(ma, 0, sizeof ma);
}

void clear(int x) {
	std::string s; getchar();
	for (int i = 1; i <= k - x; ++i) 
		getline(std::cin, s);
}

void paozhuan() {//炮臺旋轉 
	double ds; cin >> ds; int x1 = ds; 
	if (x1 != ds) { flag = 1; return; }
	if (x1 < 0 || x1 > 1) { flag = 1; return; }
	if (x1 == 1) { 
		paochao--; 
		if (paochao == -1) paochao = 3;
	}//paochao機器人朝向 
	else if (x1 == 0) { 
		paochao++; 
		if (paochao == 4) paochao = 0;
	}
}

void renzhuan() {//機器人轉動 
	double ds; cin >> ds; int x1 = ds; 
	if (x1 != ds) { flag = 1; return; }
	if (x1 < 0 || x1 > 1) { flag = 1; return; }
	if (x1 == 0) { 
		renchao++; 
		if (renchao == 4) renchao = 0;
	}//renchao機器人朝向  
	else if (x1 == 1) { 
		renchao--; 
		if (renchao == -1) renchao = 3;
	}
}

void tiandan() {//裝彈藥 
	double ds;
	cin >> ds;
	int x = ds;
	if (x != ds) { flag = 1; return; }
	if (x < 0 || x > 1) { flag = 1; return; }
	if ((int)(a.size() + 1) > arong) { flag = 1; return ; }
	if (x == 1) {
		if (dajing) { a.push(2); dajing--; }
	} else if (x == 0) {
		if (xiaojing) { a.push(1); xiaojing--; }
	}
}

void fashe() {//發射子彈 
	if (a.empty()) return;
	int shanghai = a.top(); a.pop();
	if (paochao == 0) {
		for (int i = s - 1; i >= 0; i--) 
			if (tu[i][t] == 1) break;
			else if (tu[i][t] == 2) {
				ma[i][t] -= shanghai;
				if (ma[i][t] <= 0) tu[i][t] = 0, h++;
				return;
			}
	} else if (paochao == 1) {
		for (int i = t - 1; i >= 0; i--)
			if (tu[s][i] == 1) break;
			else if (tu[s][i] == 2) {
				ma[s][i] -= shanghai;
				if (ma[s][i] <= 0) tu[s][i] = 0, h++;
				return;
			}
	} else if (paochao == 2) {
		for (int i = s + 1; i < n; i++)
			if (tu[i][t] == 1) break;
			else if (tu[i][t] == 2) {
				ma[i][t] -= shanghai;
				if (ma[i][t] <= 0) tu[i][t] = 0, h++;
				return;
			}
	} else if (paochao == 3) {
		for (int i = t + 1; i < m; i++)
			if (tu[s][i] == 1) break;
			else if (tu[s][i] == 2) {
				ma[s][i] -= shanghai;
				if (ma[s][i] <= 0) tu[s][i] = 0, h++;
				return;
			}
	}
}

bool renzou() { //機器人走 
	double ds; cin >> ds; int x = ds;
	if (x != ds) { flag = 1; return 1; }
	if (x < 0 || x >= max(n, m)) { flag = 1; return 1; }
	if (renchao == 0) {
		int bu = 0;
		while (1) {
			if (bu == x) break;
			s--, bu++;
			if (s < 0) { flag = 1, s += bu; return 1; }
			if (tu[s][t] != 0) { flag = 1, s += bu; return 1; }
		}
	} else if (renchao == 1) {
		int bu = 0;
		while (1) {
			if (bu == x) break;
			t--, bu++;
			if (t < 0) {flag = 1, t += bu; return 1; }
			if (tu[s][t] != 0) { flag = 1, t += bu; return 1; }
		}
	} else if (renchao == 2) {
		int bu = 0;
		while (1) {
			if (bu == x) break;
			s++, bu++;
			if (s >= n) {flag = 1, s -= bu; return 1; }
			if (tu[s][t] != 0) {flag = 1, s -= bu; return 1; }
		}
	} else if (renchao == 3) {
		int bu = 0;
		while (1) {
			if (bu == x) break;
			t++, bu++;
			if (t >= m) {flag = 1, t -= bu; return 1; }
			if (tu[s][t] != 0) { flag = 1, t -= bu; return 1; }
		}
	}
	return 0;
}

int main() {
	scanf("%d", &T);
	while (T--) {
		init();
		scanf("%d%d", &n, &m);
		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++) {
				scanf("%d", &tu[i][j]);
				if (tu[i][j] == 2) ma[i][j] = 2;//給靶子生命值 
			}
		scanf("%d%d%d%d%d%d", &s, &t, &arong, &dajing, &xiaojing, &k);
		for (int i = 1; i <= k; i++) {
			cin >> opt;
			if (opt == "END") { f1 = 0; clear(i); break; } 
			else if (opt == "FT") paozhuan();
			else if (opt == "FF") tiandan();
			else if (opt == "FE") fashe();
			else if (opt == "WT") renzhuan();
			else if (opt == "WG") if (renzou()) flag = 1;
			if (flag == 1) { clear(i); break;}
		}
		if (f1 == 1 || flag == 1) puts("ERROR");
		else if (f1 == 0) puts("Complete");
		printf("%d %d\n", s, t);
		printf("%d\n", h);
		printf("%d %d %d %d\n", paochao, renchao, dajing, xiaojing);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章