結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0