@[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