AOJ 0152 Bowling
問題
解法
シュミレーションの問題でいいんだよね。
ストライクとスペアに関するフラグを立てて、
- 2倍足す(f--);
- 1と一緒
- 3倍足す(f=1);
って処理してく。10フレーム目はめんどくさい。 実装量が多いというか、きれいなコードにならなかった。
コード
struct P{ int n, p; P(int n, int p):n(n),p(p){}; bool operator<(const P& r)const{ return p == r.p ? n > r.n : p < r.p; } }; int m; int solve(int *f, int n){ int res = 0; if(*f == 1 || *f == 2){ res = n*2; (*f)--;} else if(*f == 3){ res = n*3; *f = 1;} else res = n; return res; } int main(){ while(scanf("%d", & m) && m){ int a, b, sf, sum, n; priority_queue<P>q; rep(i, m){ sf = sum = 0; scanf("%d", &n); rep(j, 9){ scanf("%d", &a); sum += solve(&sf, a); if(a == 10){ sf += 2; continue;} scanf("%d", &b); sum += solve(&sf, b); if(a + b == 10){ sf += 1; continue;} } scanf("%d", &a); if(a == 10){ sum += solve(&sf, a); sf += 2; scanf("%d", &a); sum += solve(&sf, a) - a; scanf("%d", &a); sum += a; }else{ sum += solve(&sf, a); scanf("%d", &b); sum += solve(&sf, b); if(a + b == 10){ scanf("%d", &b); sum += b; } } q.push(P(n, sum)); } while(!q.empty()){ P p = q.top(); q.pop(); printf("%d %d\n", p.n, p.p); } } return 0; } ```` 構造体の比較演算子適当に書いたけど大丈夫だったようです。 他の人もelse ifとか大量に書いてる