83分,有特判未投完就结束的情况,#5WA了

P1166 打保龄球

@[Mo_xue](https://www.luogu.com.cn/user/626838)\ 只要特判这种情况 ```cpp 42 8 ↑→→→没投完 ```
by Super_Ken @ 2024-03-03 20:02:34


@[Super_Ken](/user/752808) 谢谢指点。照你这个数据改了,还有一个2#点错了,不知道哪里错了。
by mooktian @ 2024-03-06 19:54:46


@[Super_Ken](/user/752808) ```cpp #include <bits/stdc++.h> #define f(i,a,b) for(int i=a;i<=b;i++) #define g(i,a,b) for(int i=a;i>=b;i--) using namespace std; int g[30];//滚球得分 char c; struct lunci { int score,aft;//score分数,aft后续滚球能得分的次数 }a[30]; int sum[30];//累计和 void addaft(int j,int i) { for(int k = max(1,j - 2);k < j;k++) { if(a[k].aft > 0) a[k].score += g[i],a[k].aft--; } } int main(){ int cnt = 1,cnt2 = 0;//cnt2每轮滚球可能有两次,cnt滚球次数 while(cin >> c) { if(c == '/') { if(cnt2 == 1) { g[cnt] = 10 - g[cnt-1]; cnt2 = 0; }else { g[cnt] = 10; } }else { if(cnt2 == 0) { cnt2++; g[cnt] = c - '0'; }else { g[cnt] = c - '0'; cnt2 = 0; } } cnt++; } cnt--; //for(int i = 1;i <= cnt;i++) cout << g[i] <<" "; //cout <<"\n"; int j = 1,i = 1;//记录轮次 while(j <= 12 && i <= cnt) { if(g[i] == 10) a[j].score = g[i],a[j].aft = 2,addaft(j,i),i++,j++; if(g[i] < 10) { if(i < cnt) { a[j].score = g[i] + g[i+1]; if(a[j].score < 10) a[j].aft = 0; else a[j].aft = 1; addaft(j,i); addaft(j,i+1); i += 2; j++;}else { a[j].score = g[i],a[j].aft = 2,addaft(j,i); break; } } } while(a[j].score == 0) j--; for(int k = 1;k <= j;k++) { if(a[k].aft == 0) { cout << a[k].score <<" "; sum[k] += sum[k-1] + a[k].score; } } cout <<"\n"; for(int k = 1;k <= j;k++) if(a[k].aft == 0) cout << sum[k] << " "; return 0; } ``` 能帮忙看看么
by mooktian @ 2024-03-06 19:55:31


|