結果
| 問題 | 
                            No.769 UNOシミュレータ
                             | 
                    
| コンテスト | |
| ユーザー | 
                             KiYugadgeter
                         | 
                    
| 提出日時 | 2019-03-31 12:43:49 | 
| 言語 | C++14  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                            (最新)
                                AC
                                 
                             
                            (最初)
                            
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 3,742 bytes | 
| コンパイル時間 | 734 ms | 
| コンパイル使用メモリ | 75,280 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-11-22 09:17:32 | 
| 合計ジャッジ時間 | 2,410 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 22 WA * 1 | 
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
class player {
    public:
        int num;
        int current_player;
        bool is_reverse;
        bool toggle() {
            if (is_reverse)
                is_reverse = false;
            else
                is_reverse = true;
            return is_reverse;
        }
        void prev() {
            if (!is_reverse) {
                if (current_player - 1 < 0) {
                    current_player = num - 1;
                    return;
                }
                current_player--;
            }
            else {
                if (current_player + 1 > num - 1) {
                    current_player = 0;
                    return;
                }
                current_player++;
            }
        }
        void next() {
            if (!is_reverse) {
                if (current_player + 1 > num - 1) {
                    current_player = 0;
                    return;
                }
                current_player++;
            }
            else {
                if (current_player - 1 < 0) {
                    current_player = num - 1;
                    return;
                }
                current_player--;
            }
        }
        player(int num) : is_reverse(false), num(num) {}
};
class Uno {
    public:
        std::vector<int> card_num;
        int player_num;
        int log_num;
        player pobj;
        int drawfour;
        int drawtwo;
        Uno(int player_num, int log_num) : player_num(player_num), log_num(log_num), pobj(player_num), drawfour(0), drawtwo(0) {
            for (int x = 0; x < player_num; x++) {
                card_num.push_back(0);
            }
        }
        void draw() {
            if (drawfour != 0) {
                card_num[pobj.current_player] += drawfour;
                drawfour = 0;
                pobj.next();
            }
            else if (drawtwo != 0) {
                card_num[pobj.current_player] += drawtwo;
                drawtwo = 0;
                pobj.next();
            }
        }
        void turn(std::string s) {
            if (s == "reverse") {
                draw();
                card_num[pobj.current_player] -= 1;
                pobj.toggle();
                pobj.next();
            }
            else if (s == "number") {
                draw();
                card_num[pobj.current_player] -= 1;
                pobj.next();
            }
            else if (s == "skip") {
                draw();
                card_num[pobj.current_player] -= 1;
                pobj.next();
                pobj.next();
            }
            else if (s == "drawfour") {
                if (drawtwo) {
                    card_num[pobj.current_player] += drawtwo;
                    drawtwo = 0;
                    pobj.next();
                }
                card_num[pobj.current_player] -= 1;
                drawfour += 4;
                pobj.next();
            }
            else if (s == "drawtwo") {
                if (drawfour) {
                    card_num[pobj.current_player] += drawfour;
                    drawfour = 0;
                    pobj.next();
                }
                card_num[pobj.current_player] -= 1;
                drawtwo += 2;
                pobj.next();
            }
        }
};
int main() {
    std::string str;
    int player_num, log_num;
    std::cin >> player_num >> log_num;
    Uno u(player_num, log_num);
    for (int i = 0; i < log_num; i++) {
        std::cin >> str;
        u.turn(str);
    }
    u.pobj.prev();
    auto winner = u.pobj.current_player + 1;
    auto w = u.card_num[u.pobj.current_player] * -1;
    std::cout << winner << " " << w << std::endl;
}
            
            
            
        
            
KiYugadgeter