結果
問題 | No.769 UNOシミュレータ |
ユーザー |
![]() |
提出日時 | 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;elseis_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;}