Gym 100646 Problem C: LCR 模拟题
Problem C: LCR
题目连接:
http://codeforces.com/gym/100646/attachments
Description
LCR is a simple game for three or more players. Each player starts with three chips and the object is to
be the last person to have any chips. Starting with Player 1, each person rolls a set of three dice. Each
die has six faces, one face with an L, one with a C, one with an R and three with a dot. For each L
rolled, the player must pass a chip to the player on their left (Player 2 is considered to be to the left of
Player 1); for each R rolled, the player passes a chip to the player on their right; and for each C rolled,
the player puts a chip in a central pile which belongs to no player. No action is taken for any dot that
is rolled. Play continues until only one player has any chips left. In addition, the following rules apply:
- A player with no chips is not out of the game, since they may later gain chips based on other
players’ rolls. - A player with only 1 or 2 chips left only rolls 1 or 2 dice, respectively. A player with no chips left
does not roll but just passes the dice to the next player.
Your job is to simulate this game given a sequence of dice rolls.
Input
Input will consist of multiple test cases. Each test case will consist of one line containing an integer n
(indicating the number of players in the game) and a string (specifying the dice rolls). There will be at
most 10 players in any game, and the string will consist only of the characters ‘L’, ‘C’, ‘R’ and ‘.’. In
some test cases, there may be more dice rolls than are needed (i.e., some player wins the game before
you use all the dice rolls). If there are not enough dice rolls left to complete a turn (for example, only
two dice rolls are left for a player with 3 or more chips) then those dice rolls should be ignored. A value
of n = 0 will indicate end of input.
Output
For each test case, output the phrase “Game i:” on a single line (where i is the case number starting
at 1) followed by a description of the state of the game. This desciption will consist of n+1 lines of the
form
Player 1:c1
Player 2:c2
...
Player n:cn
Center:ct
where c1, c2 ... cn are the number of chips each player has at the time the simulation ended (either
because some player has won or there are no more remaining dice rolls) and ct is the number of chips
in the center pile. In addition, if some player has won, you should append the string “(W)” after their
chip count; otherwise you should append the string “(*)” after the chip count of the player who is the
next to roll. The only blank on any line should come before the game number or the player number.
Use a single blank line to separate test cases.
Sample Input
3 LR.CCR.L.RLLLCLR.LL..R...CLR.
5 RL....C.L 0
Sample Output
Game 1:
Player 1:0
Player 2:0
Player 3:6(W)
Center:3
Game 2:
Player 1:1
Player 2:4
Player 3:1
Player 4:4(*)
Player 5:4
Center:1
Hint
题意
模拟题,每个人一开始有三个薯片,然后从1开始,扔最多三个骰子,如果这个人的骰子小于3个的话,就扔他拥有的个数个骰子,如果他没有骰子的话,直接递给下个人。
如果扔到L,那么就把薯片给左边,扔到R就给右边,扔到C就扔中间,扔到点,什么都不做。
如果最后的骰子数小于这个人需要扔的,那就直接无视掉。
胜利条件是一个人拥有所有人最后的薯片。
如果游戏能结束,就直接输出胜利玩家,否则就输出下一个该谁扔。
题解:
模拟题,就模拟就好了。
代码
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int cnt[100];
int cas,mi,now,t;
void init(){
memset(cnt,0,sizeof(cnt));
t=0;
mi=0;
now=0;
}
void soe(int x,int y,int z){
for(int i=x;i<y;i++){
if(s[i]=='R'){
cnt[z]--;
cnt[(z+n-1)%n]++;
}
if(s[i]=='L'){
cnt[z]--;
cnt[(z+1)%n]++;
}
if(s[i]=='C'){
cnt[z]--;
mi++;
}
if(s[i]=='.')continue;
}
}
void solve(){
init();
mi=0;
printf("Game %d:\n",++cas);
memset(cnt,0,sizeof(cnt));
cin>>s;
for(int i=0;i<n;i++)cnt[i]=3;
int cccc=0;
int flag = -1;
while(t<s.size()){
cccc++;
if(cccc>1000000)break;
if(t+min(cnt[now],3)<=s.size()){
int pre = cnt[now];
soe(t,t+min(cnt[now],3),now);
t+=min(pre,3);
now++;
now%=n;
while(cnt[now]==0){
now++;
now%=n;
}
}else{
break;
}
for(int i=0;i<n;i++){
if(cnt[i]+mi==3*n)flag=i;
}
if(flag!=-1)break;
}
for(int i=0;i<n;i++){
printf("Player %d:%d",i+1,cnt[i]);
if(flag==i)printf("(W)");
if(flag==-1&&i==now)printf("(*)");
printf("\n");
}
printf("Center:%d\n",mi);
printf("\n");
}
int main(){
//freopen("1.in","r",stdin);
while(scanf("%d",&n)!=EOF){
if(n==0)break;
solve();
}
}
Gym 100646 Problem C: LCR 模拟题的更多相关文章
- Gym 100646 Problem E: Su-Su-Sudoku 水题
Problem E: Su-Su-Sudoku/center> 题目连接: http://codeforces.com/gym/100646/attachments Description By ...
- Codeforces Gym 100269B Ballot Analyzing Device 模拟题
Ballot Analyzing Device 题目连接: http://codeforces.com/gym/100269/attachments Description Election comm ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题
Problem F. Finance 题目连接: http://codeforces.com/gym/100714 Description The Big Boss Company (BBC) pri ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem I. Interest Targeting 模拟题
Problem I. Interest Targeting 题目连接: http://codeforces.com/gym/100714 Description A unique display ad ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
Problem K. UTF-8 Decoder 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c702 ...
- codeforce gym/100495/problem/K—Wolf and sheep 两圆求相交面积 与 gym/100495/problem/E—Simple sequence思路简述
之前几乎没写过什么这种几何的计算题.在众多大佬的博客下终于记起来了当时的公式.嘚赶快补计算几何和概率论的坑了... 这题的要求,在对两圆相交的板子略做修改后,很容易实现.这里直接给出代码.重点的部分有 ...
- sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
The Android University ACM Team Selection Contest Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里 ...
- UVALive 4222 Dance 模拟题
Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...
- cdoj 25 点球大战(penalty) 模拟题
点球大战(penalty) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/2 ...
随机推荐
- PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)
一.大体流程图 二.PHP 项目文件加密 下表列出了Zend产品中的PHP版本及其内部API版本和Zend产品版本. 如何加密请往后看 三.如何使用 第一步:确认当前环境 Amai Phalcon 前 ...
- IntelliJ IDEA 破解 - pycharm
MAC激活方法 下载破解文件 下载地址: https://files.cnblogs.com/files/resn/JetbrainsCrack-2.7-release-str.jar.zip 或者去 ...
- 如何将U盘转化成NTFS格式
拷贝数据到U盘,出现 出现错误0x80070052:无法创建目录或文件 然后发现应该是U盘为fat32格式的,感觉应该是这个问题 方法一:如果你是新买的U盘,或者U盘内数据已经备份到电脑,可以使用该条 ...
- 20155339 2016-2017-2 《Java程序设计》第5周学习总结
20155339 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 使用try.catch 使用try.catch语法,JVM会先尝试执行try区块中的代码,如 ...
- 第10月第13天 xcode ipa
1. xcodebuild -exportArchive -exportFormat ipa -archivePath RongChatRoomDemo\ 17-7-13\ 下午4.04.xcarch ...
- HDU 1005 Number Sequence (模拟)
题目链接 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f( ...
- fish(自动推荐命令;语法高亮等)
Fish 是 Linux/Unix/Mac OS 的一个命令行 shell,有一些很好用的功能. 自动推荐 VGA 颜色 完美的脚本支持 基于网页的配置 帮助文档自动补全 语法高亮 以及更多 自动推荐 ...
- tar压缩文件排除文件夹【原创】
例如压缩redis-3.2.0目录,但是不想压缩redis-3.2.0下面的src目录 -. --exclude=redis-/src 注意--exclude=redis-3.2.0/src后面一定不 ...
- Webservice soap wsdl区别之个人见解
原文:http://blog.csdn.net/pautcher_0/article/details/6798351 Web Service实现业务诉求:Web Service是真正“办事”的那个,提 ...
- oracle行转列
wm_concat()函数 --创建表 create table test(id number,name varchar2(20)); --插入数据 insert into test values(1 ...