一天,fish 与 sheep 在玩俄罗斯轮盘。
游戏描述:俄罗斯轮盘是一种自杀式玩命游戏。参与者在左轮手枪的弹巢放入一颗子弹或多颗子弹,关上弹巢后将子弹盘向顺时针任意旋转。参与者轮流把手枪对着自己的头开枪,每次按下扳机后弹巢会向顺时针旋转一个子弹孔;直至有人中枪为止,未中枪的人则获胜。注:每个弹孔都有一个编号,旋转方向为顺时针,如图编号依次顺序是1,2,3,4,5,6.
输入格式:
第一行输入6个为1或0的整数 a1…a6,表示弹巢中的6个子弹孔,其中1表示装有子弹,0表示没有。并保证测试数据中至少有一发子弹。
第二行输入一个字符串,表示第一个扣动扳机的玩家。
第三行输入一个整数 m,表示在开始轮流开枪前,旋转子弹盘过程中,转过枪管的子弹孔的总次数(次数为0,表示关上后不转动弹巢)。(0≤m≤10^9)
输出格式:
第一行输出6个整数,表示转完后扣下扳机前,手枪内子弹的顺序(每个数末尾都有空格)。
第二行输出一个字符串,表示谁赢了(轮流开枪后存活的人获胜)。
输入样例:
1 0 0 0 0 0 sheep 15
输出样例:
0 0 0 1 0 0 sheep
思路:简单模拟,已知弹匣6次为一循环,直接对 6 取模将1e9的循环优化至6次以内。
坑点:1. 不知道是我阅读理解有问题还是作者 Stupidsheep 真的 stupid ,顺时针操作就是不行,一定要反过来逆时针模拟才能AC,不然只有2分。
2.末尾有空格 。
c++代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
vector<int>v;
for(int i=0;i<6;i++){
int a;cin>>a;
v.push_back(a);
}
string name;cin>>name;
int m;cin>>m;
m %= 6;//6次一个循环,转了6次等于没赚,直接从 1e9 优化到 6
m = (6-m+6)%6; //不知道是我阅读理解有问题还是作者 Stupidsheep 真的 stupid ,顺时针操作就是不行,一定要反过来。
while(m--){
v.push_back(v[0]);//转动 m 次
v.erase(v.begin());
}
for(int i=0;i<6;i++)cout<<v[i]<<" \n"[i==5];
for(int i=0;i<6;i++){
if(v[i]==1){
if(i%2!=0){
cout<<name<<endl;
}else{
if(name=="sheep")cout<<"fish"<<endl;
else cout<<"sheep"<<endl;
}
break;//只要有一人死亡,就得break,样例中存在多发子弹的情况
}
}
return 0;
}