結果
| 問題 |
No.769 UNOシミュレータ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-02-26 00:45:05 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 85 ms / 2,000 ms |
| コード長 | 2,510 bytes |
| コンパイル時間 | 648 ms |
| コンパイル使用メモリ | 65,152 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-22 09:34:04 |
| 合計ジャッジ時間 | 2,320 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
ソースコード
#include <iostream>
using namespace std;
int card[100001];
int main(){
int n,m;cin>>n>>m;
int nw = 1;
bool rev = false;
int d = 0;
int pl = 0;
for(int i = 0; m > i; i++){
string s;cin>>s;
int nya = 1;
//nw番の人の行動の次がnw+nya番の人
if(s == "number"){
if(d){
//nw番の人はカードを引く
card[nw]-=pl;
pl=0;d=0;
//nw+1番の人が行動する
nw+=(rev?-1:1);
if(0 >= nw)nw+=n;
else if(nw > n)nw-=n;
}
//numberを出す
card[nw]++;
}else if(s == "drawtwo"){
if(d==4){
//nw番の人はカードを引く
card[nw]-=pl;
pl=0;d=0;
//nw+1番の人が行動する
nw+=(rev?-1:1);
if(0 >= nw)nw+=n;
else if(nw > n)nw-=n;
}
d=2;
pl+=2;
card[nw]++;
}else if(s == "drawfour"){
if(d==2){
//nw番の人はカードを引く
card[nw]-=pl;
pl=0;d=0;
//nw+1番の人が行動する
nw+=(rev?-1:1);
if(0 >= nw)nw+=n;
else if(nw > n)nw-=n;
}
d=4;
pl+=4;
card[nw]++;
}else if(s == "skip"){
if(d){
//nw番の人はカードを引く
card[nw]-=pl;
pl=0;d=0;
//nw+1番の人が行動する
nw+=(rev?-1:1);
if(0 >= nw)nw+=n;
else if(nw > n)nw-=n;
}
//nw+1番の人をスキップする
nya++;
card[nw]++;
}else if(s == "reverse"){
if(d){
//nw番の人はカードを引く
card[nw]-=pl;
pl=0;d=0;
//nw+1番の人が行動する
nw+=(rev?-1:1);
if(0 >= nw)nw+=n;
else if(nw > n)nw-=n;
}
rev = (rev?false:true);
card[nw]++;
}
if(i+1 == m){
cout << nw << " " << card[nw] << endl;
return 0;
}
//cout << nw << " " << nya << endl;
nw += (rev?-1:1)*nya;
if(0 >= nw)nw+=n;
else if(nw > n)nw-=n;
}
}