ZJNU 2353 - UNO
大模拟,但是题目好像有些地方表述不清
根据UNO在初中曾被别人虐了很久很久的经历
猜测出了原本的题意
本题中的+2虽然有颜色,但是也可以当作原UNO游戏中的+4黑牌
即在某人出了+2后,可以出不同颜色的+2更改场上的颜色
在+2环节,如果一个人除了+2,下一个人如果有+2,就可以把+2出出去,这一回合就不需要再出东西了
直到最后一个人没有任何颜色的+2牌了,那么这个人就要摸累积起来的数量的牌
#include<bits/stdc++.h>
using namespace std;
queue<int> q;
int have[][],haveNum[];
int gcid(char in){
switch(in){
case 'B':return ;
case 'G':return ;
case 'R':return ;
case 'Y':return ;
}
}
void getcard(int who,int num){
int i;
for(i=;i<num;i++){
have[who][q.front()]++;
q.pop();
}
haveNum[who]+=num;
}
int main(){
int i,j,turn=,nDigit,nColor,pluscard=;
bool could=false,sameColor=false;
char s[];
memset(have,,sizeof have);
memset(haveNum,,sizeof haveNum);
for(i=;i<;i++){
cin>>s;
if(s[]=='Y')
q.push(gcid(s[]));
else
q.push(gcid(s[])*+s[]-'');
}
for(i=;i<;i++)
getcard(i,);
for(i=;!could&&i<;i++)
for(j=;j<;j++)
if(have[][j*+i]){
have[][j*+i]--;
haveNum[]--;
nColor=j;
nDigit=i;
q.push(j*+i);
could=true;
break;
}
for(i=;!could&&i<;i++)
if(have[][i]){
have[][i]--;
haveNum[]--;
nColor=j;
q.push(i);
pluscard+=;
sameColor=true;
could=true;
}
while(haveNum[]&&haveNum[]&&haveNum[]&&haveNum[]&&haveNum[]){
could=false;
if(pluscard){
if(have[turn][nColor]){//同色+2
have[turn][nColor]--;
haveNum[turn]--;
pluscard+=;
q.push(nColor);
could=true;
}
for(i=;!could&&i<;i++)//异色+2
if(have[turn][i]){
have[turn][i]--;
haveNum[turn]--;
nColor=i;
pluscard+=;
q.push(i);
could=true;
}
if(could){
turn=(turn+)%;
continue;
}
else{
getcard(turn,pluscard);
pluscard=;
}
}
for(i=;!could&&i<;i++)//相同颜色选数字
if(have[turn][nColor*+i]){
have[turn][nColor*+i]--;
haveNum[turn]--;
nDigit=i;
q.push(nColor*+i);
could=true;
sameColor=false; }
for(i=;!could&&!sameColor&&i<;i++)//相同数字选颜色
if(have[turn][i*+nDigit]){
have[turn][i*+nDigit]--;
haveNum[turn]--;
nColor=i;
q.push(i*+nDigit);
could=true;
}
if(!could&&have[turn][nColor]){//同色+2
have[turn][nColor]--;
haveNum[turn]--;
pluscard+=;
q.push(nColor);
sameColor=true;
could=true;
}
for(i=;!could&&sameColor&&i<;i++)//异色+2
if(have[turn][i]){
have[turn][i]--;
haveNum[turn]--;
nColor=i;
pluscard+=;
q.push(i);
could=true;
}
if(!could)
getcard(turn,);
turn=(turn+)%;
}
getcard(turn,pluscard);
for(i=;i<;i++){
if(!haveNum[i])
puts("Winner");
else{
int score=;
for(j=;j<;j++)
if(have[i][j])
score+=*have[i][j];
for(j=;j<;j++)
if(have[i][j])
score+=(j%)*have[i][j];
printf("%d\n",score);
}
} return ;
}
ZJNU 2353 - UNO的更多相关文章
- 基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用
一.前言: A.Arduino简介 Arduino是由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Banzi.David Cuartielles.Tom Igoe.Gianluc ...
- hdu 3047–Zjnu Stadium(带权并查集)
题目大意: 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突. 分析: 首 ...
- hdu 3074 Zjnu Stadium (带权并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Arduino uno R3 ISP刷Rootloader for arduino pro mini
找了好久才发现的,好东西.介绍怎么使用uno对mini 刷Rootloader **SOLUTION** Reinstall the Arduino Pro Mini Bootloader using ...
- [Arduino] Arduino Uno R3 中文介绍
Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板.UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出 ...
- import uno 错误
安装aeroolib 模块后,提示没有 uno 相关段一些模块, 原因是这些模块是 openoffice 中段,需要先安装 openoffice. 1:清除所有 libreoffice 软件, su ...
- 《团队作业》五小福团队--UNO的博客链接汇总
<团队作业>五小福团队--UNO的博客链接汇总 <团队作业第一周>五小福团队作业--UNO <团队作业第二周>五小福团队作业--UNO <团队作业第三.第四周 ...
- Platform.Uno介绍
编者语:Xamarin国内很多人说缺乏可用的实例,我在写书过程中在完善一些常用场景的例子,希望帮到大家.Build 2018结束一周了,善友问我要不要谈谈Xamarin的一些变化,但碍于时间有限一直没 ...
- 《团队作业第一周》五小福团队作业——UNO
<团队作业第一周>团队作业--UNO 一.团队展示 队员学号 队名:五小福 (真是个红红火火恍恍惚惚的队名)> 拟作的团队项目描述 基于安卓开发的有趣味性的UNO纸牌小游戏 队员风采 ...
随机推荐
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-home
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- leetcode(数据结构)—— 镜像二叉树
镜像二叉树,力扣上面的的题目,这道题很简单,放出来的原因是它要求用两种解法来写这道题——递归和迭代,而且数据结构学到了树,记录自己学习的过程,以免忘了,没地方找. 题目的意图很明显,就是然你写个程序看 ...
- tensorflow学习笔记(三)常用函数
上一篇简单介绍了tensorflow的基本操作,这一篇介绍一些常用的函数. tf.constant() tf.constant ( value , dtype = None , shape = Non ...
- 052-PHP输出多个参数
<?php $x=5; //初始化两个变量 $y=10; echo $x,$y,"<br />$x+$y=",$x+$y; //输出多个参数 ?>
- 100-PHP二维数组的元素输出三
<?php $stu=array(array(76,87,68), array(65,89,95), array(90,80,66), array(90,95,65)); //定义一个二维数组 ...
- docker 安装好后启动异常解决
一个月前在虚拟机中根据视频教程安装了docker 启动docker后执行 systemctl status docker 出现了异常,具体如下: [root@joinApp2 ~]# systemct ...
- Java 二叉树深度 判断平衡二叉树
package cookie; public class BTreeDepthIsBalanced { int depth(BNode head) { if (head == null) { retu ...
- HDU 4901 多校4 经典计数DP
RT 最近不想写博客,累积了一周多的题目,今天趁着周日放假,全部补上吧 dp[i][j]表示前i个数,操作后的值为j的总个数 注意取或不取,有种完全背包的意味.因为数字小于1024,所以异或的结果也绝 ...
- jupiter的@TempDir 等不生效
jupiter与junit是 完全独立的测试组件,要严防在测试中将二者混用.最好在依赖引入jupiter 时 就将junit的依赖干掉,以防在写测试用例时将二者混用.不会报错,但是会导致 jupite ...
- vue 中 {{}} 和 v-text 和 v-html 区别
data: { message:'<h3>我是一只小小小小鸟!</h3>' }, <div class="" >{{message}}</ ...