大模拟,但是题目好像有些地方表述不清

根据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的更多相关文章

  1. 基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用

    一.前言:  A.Arduino简介 Arduino是由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Banzi.David Cuartielles.Tom Igoe.Gianluc ...

  2. hdu 3047–Zjnu Stadium(带权并查集)

    题目大意: 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突. 分析: 首 ...

  3. hdu 3074 Zjnu Stadium (带权并查集)

    Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  4. Arduino uno R3 ISP刷Rootloader for arduino pro mini

    找了好久才发现的,好东西.介绍怎么使用uno对mini 刷Rootloader **SOLUTION** Reinstall the Arduino Pro Mini Bootloader using ...

  5. [Arduino] Arduino Uno R3 中文介绍

    Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板.UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出 ...

  6. import uno 错误

    安装aeroolib 模块后,提示没有 uno 相关段一些模块, 原因是这些模块是 openoffice 中段,需要先安装 openoffice. 1:清除所有 libreoffice 软件,  su ...

  7. 《团队作业》五小福团队--UNO的博客链接汇总

    <团队作业>五小福团队--UNO的博客链接汇总 <团队作业第一周>五小福团队作业--UNO <团队作业第二周>五小福团队作业--UNO <团队作业第三.第四周 ...

  8. Platform.Uno介绍

    编者语:Xamarin国内很多人说缺乏可用的实例,我在写书过程中在完善一些常用场景的例子,希望帮到大家.Build 2018结束一周了,善友问我要不要谈谈Xamarin的一些变化,但碍于时间有限一直没 ...

  9. 《团队作业第一周》五小福团队作业——UNO

    <团队作业第一周>团队作业--UNO 一.团队展示 队员学号 队名:五小福 (真是个红红火火恍恍惚惚的队名)> 拟作的团队项目描述 基于安卓开发的有趣味性的UNO纸牌小游戏 队员风采 ...

随机推荐

  1. C#常用类库简介(二)

    原文出处:http://blog.csdn.net/weiwenhp/article/details/8140503 C#常用类库简介(一)的地址 System与mscorlib这两个dll中的类库是 ...

  2. Solve Error: Could not find the certificate xxxx.com. at ServerlessCustomDomain.<anonymous>

    When runs "serverless create_domain", we may get the following error: Could not find the c ...

  3. 三十八、SAP设置默认语言

    一.点击系统->用户参数文件->用户数据 二.设置成需要的语言 三.重新登录,并在登录时选择EN 四.进入界面

  4. 【LeetCode】160. 相交链表

    题目 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...

  5. 动态添加,删除class样式

    function hasClass(obj, cls) { //class位于单词边界,判断class样式是否已经存在 return obj.className.match(new RegExp('( ...

  6. VNC连接桌面

    1.#yum -y install vnc *vnc-server* 2.修改VNCServer主配置文件 #vim /etc/sysconfig/vncservers 复制最后两行并去掉行首注释符, ...

  7. BZOJ 4901 [CTSC2017]网络

    题解: 只会O(n log^2 n) O(n log n)先留坑 不开long long 0 分!!!! #include<iostream> #include<cstdio> ...

  8. 七、CI框架之分配变量数组,循环输出

    一.添加并传递变量 二.在View界面输出 输出显示 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.

  9. JDK1.8 HashMap学习

    1:源码分析 1.1:构造方法 public HashMap(int initialCapacity, float loadFactor) { ) throw new IllegalArgumentE ...

  10. JavaBean和json数据之间的转换(二)含有date类型的JavaBean

    1.前言 上次讲了简单的JavaBean和json格式之间的转换,代码很简单,但是实际过程中,往往用到的JavaBean都是比较复杂的,其他的字段还好,如果JavaBean中包含了date类型的字段, ...