POJ 1323: Game Prediction


タイトルはこちら
問題を解く構想:手札は小さいから大きいまで並べ替えます.現在局の最大手札はn*mから減少し、自分の札面が現在最大であれば、勝局に1を加えなければならない.そうしないと必ず負ける.
とても簡単な問題で、弁解しないで、コードをつけます:
#include <cstdio>
#include <algorithm>

//       
int card[51];

int main() {
    int m, n, c = 1;
    while (scanf("%d %d", &m, &n) && (m || n)) {
        for (int i = 0; i < n; ++i) {
            scanf("%d", &card[i]);
        }

        std::sort(card, card + n);

        // cm          
        int cm = m * n;
        int won = 0, lose = 0;
        int i = n - 1;
        while (true) {
            //              ,  ;
            //     ,cm   1         
            if (cm == card[i])
                ++won;
            else {
                ++lose;
                --cm;
            }
            //     ,    
            if (won + lose == n) {
                break;
            }

            --i, --cm;
        }

        printf("Case %d: %d
", c, won); ++c; } return 0; }