結果
| 問題 | 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