心路歷程
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);
}
}