CSP.AC#6 低配機器人
阿新 • • 發佈:2020-04-27
心路歷程
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,sizeof tu); memset(ma,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",t); printf("%d\n",h); printf("%d %d %d %d\n",xiaojing); } }