#题目:

Jack在和朋友们玩德国心脏病。

德国心脏病的游戏牌分为水果牌和动物牌。水果只有4种:香蕉、草莓、樱桃、柠檬,每张水果牌上会有种类不定、总数目1-5的水果;动物只有3种:猴子、大象、猪,每张动物牌上有且仅有一只动物。

n名玩家绕圈就座,第一轮游戏从0号至n-1号轮流出牌。每个玩家面前最多只有一张牌,如果玩家出牌时,他的面前已经摆放了一张牌,他新出的牌将会严丝合缝地盖住旧牌。

任何时候玩家可以选择按铃操作。如果按铃成功,玩家可以获得当前场上所有牌(包括被盖住的牌)并进入下一轮游戏,下一轮游戏由他先出牌,然后依序轮流出牌;否则,他需要支付给每位玩家一张手牌,然后他成为下一位出牌者,继续这一局游戏。

按铃成功的条件:

1、当前场上(被盖住的牌不算,以下同)某种水果的数量正好为5。

2、当前场上出现猴子,至少有一个水果,且没有出现柠檬。

3、当前场上出现大象,至少有一个水果,且没有出现草莓。

4、当前场上出现猪,且至少有一个水果。

Bob对这个游戏很感兴趣,他给了Jack一个操作序列,希望Jack输出最终每个人拥有的牌的数量。每名玩家初始拥有10,000,000张牌。操作分为两种:出牌或按铃。操作结束时游戏立即终止。

1、出牌的格式是:Fruit+水果数s+水果种类*s,0、1、2、3分别表示香蕉、草莓、樱桃、柠檬。如Fruit 4 0 2 2 2代表1个香蕉和3个樱桃的牌。或Animal+动物种类,0、1、2分别代表猴子、大象、猪。如Animal 0代表一张猴子牌。注意,选手需要自己计算出牌者是几号玩家。

2、按铃的格式是:Ring+选手编号。如Ring 2。

输入

第一行两个正整数n(≤10), k(≤100,000)。

接下来k行,每行对应一个操作。

输出

n行,每行一个整数,代表每个玩家游戏结束后拥有的牌的数目。

样例解释

3 13             # 井号后为样例输入说明:3名玩家,13次操作
Fruit 5 0 0 0 0 0   # 0号玩家出牌:5个香蕉
Ring 0          # 0号玩家按铃:按铃成功,获得场上的1张牌,开始下一轮游戏
Ring 1          # 1号玩家按铃:按铃失败,给0, 2号玩家各一张牌
Fruit 3 3 0 0       # 1号玩家出牌:1个柠檬+2个香蕉
Animal 0        # 2号玩家出牌:猴子
Fruit 4 2 2 2 2     # 0号玩家出牌:4个樱桃
Ring 2          # 2号玩家按铃:按铃失败,给0, 1号玩家各一张牌
Fruit 3 0 0 0       # 2号玩家出牌:3个香蕉,盖住上一张牌【猴子】
Fruit 2 0 0         # 0号玩家出牌:2个香蕉,盖住上一张牌【4个樱桃】
Ring 2          # 2号玩家按铃:按铃失败,给0, 1号玩家各一张牌
Animal 2        # 2号玩家出牌:猪,盖住上一张牌【3个香蕉】
Ring 0          # 0号玩家按铃:按铃成功,获得场上的6张牌,开始下一轮游戏
Animal 2        # 0号玩家出牌:猪,游戏终止

样例输入

3 13
Fruit 5 0 0 0 0 0
Ring 0
Ring 1
Fruit 3 3 0 0
Animal 0
Fruit 4 2 2 2 2
Ring 2
Fruit 3 0 0 0
Fruit 2 0 0
Ring 2
Animal 2
Ring 0
Animal 2

样例输出

10000006
9999999
9999994

#思路

没有什么特别高深的算法,就是要仔细认真,注意细节,提交了很多次,都是小地方出错了,按照题目给的逻辑写就行了,具体可以看代码。

#code

#include<iostream>
#include <numeric>
#include<vector>
#include<string>
using namespace std;
bool panduan(vector<vector<int>>& Fruit,vector<vector<int>>& Animal)//判断是否按铃成功
{vector<int>a(4,0);vector<int>b(3,0);for(int i=0;i< Fruit.size();++i){for(int j=0;j< Fruit[i].size();++j)a[j]+=Fruit[i][j];}for(int i=0;i<Animal.size();++i){for(int j=0;j<Animal[i].size();++j)b[j]+=Animal[i][j];}for(int i=0;i<a.size();++i){if(a[i]==5)return true;}if(b[0]>0){if(accumulate(a.begin(),a.end(),0)>0&&a[3]==0)return true;}if(b[1]>0){if(accumulate(a.begin(),a.end(),0)>0&&a[1]==0)return true;}if(b[2]>0){if(accumulate(a.begin(),a.end(),0)>0)return true;}return false;
}
int main()
{int num=0;int turn =0;cin>>num>>turn;int people=num;vector<long long>wj(num,10000000);vector<vector<int>>Fruit(num,vector<int>(4,0));vector<vector<int>>Animal(num,vector<int>(3,0));num=0;int pk=0;//cout<<turn;while(turn--)//一共多少轮{string str;cin>>str;//cout<<str<<endl;if(str=="Ring")//如果按铃{//cout<<1<<endl;int anlin=0;cin>>anlin;num=anlin;if(panduan(Fruit,Animal)){//cout<<1<<endl;wj[num]+=pk;pk=0;for(int i=0;i<Fruit.size();++i)fill(Fruit[i].begin(),Fruit[i].end(),0);for(int i=0;i<Animal.size();++i)fill(Animal[i].begin(),Animal[i].end(),0);}else{//cout<<2<<endl;wj[num]=wj[num]-wj.size();for(int i=0;i<wj.size();++i)wj[i]++;}}else if(str=="Animal")//如果是动物牌{//cout<<2<<endl;int temp=0;cin>>temp;fill(Animal[num].begin(),Animal[num].end(),0);fill(Fruit[num].begin(),Fruit[num].end(),0);Animal[num][temp]++;wj[num]--;pk++;num++;num=num%people;}else if(str=="Fruit")//如果是水果牌{//cout<<3<<endl;fill(Animal[num].begin(),Animal[num].end(),0);fill(Fruit[num].begin(),Fruit[num].end(),0);int temp=0;cin>>temp;while(temp--){int n=0;cin>>n;Fruit[num][n]++;}wj[num]--;pk++;num++;num=num%people;}}for(int i=0;i<wj.size();++i)//输出结果cout<<wj[i]<<endl;//system("pause");return 0;
}

hihocoder 第280周德国心脏病c++相关推荐

  1. hihocoder 1531 德国心脏病 (模拟)

    描述 Jack在和朋友们玩德国心脏病. 德国心脏病的游戏牌分为水果牌和动物牌.水果只有4种:香蕉.草莓.樱桃.柠檬,每张水果牌上会有种类不定.总数目1-5的水果:动物只有3种:猴子.大象.猪,每张动物 ...

  2. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  3. 寒假算法学习 OI生涯 - 悄无声息(模拟+线性DP优化) OI生涯 - 德国心脏病 (模拟)

    OI生涯 - 悄无声息 题目描述 「李」走路是没有动静的,如果你在干「李」不让你干的事情,他会神不知鬼不觉的走到你的身后,然后把你奶一顿! 因为你知道「李」走路没有动静,所以为了提防,可以认为「李」有 ...

  4. HihoCode 1531 : 德国心脏病

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Jack在和朋友们玩德国心脏病. 德国心脏病的游戏牌分为水果牌和动物牌.水果只有4种:香蕉.草莓.樱桃.柠檬,每张水果牌上 ...

  5. hihocoder第220周-一道拧巴的题

    一.220周 题目链接 问题描述 键盘上有N个数字按键,每个按键只能按一次,每次可以按下多个键,请输出所有可能的按键情况. 输入一个整数N(N在1~8之间),输出全部的按键可能.例如:输入3,输出为 ...

  6. hihocoder 第113周 Fibonacci(动态规划)

    题目大意:给定一个数字序列,求该序列的所有子序列中有多少是斐波拉契数列的前缀,即满足"1 1 2 3 ..."的形式. 解题思路:首先注意ai的范围,首先可以肯定斐波拉切数列不会太 ...

  7. hihocoder第238周:杨氏矩阵的个数

    题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...

  8. hihocoder第237周:三等分带权树

    题目链接 问题描述 给定一棵树,树中每个结点权值为[-100,100]之间的整数.树中包含结点总数不超过1e5.任选两个非根节点A.B,将这两个结点与其父节点断开,可以得到三棵子树.现要求三棵子树的权 ...

  9. hihocoder第233周

    题目链接 题目描述 给定一个数组a[N],N小于1e5.把数组划分成若干个片段,每个片段的和都不为0,问有多少种划分方法? 方法描述 定义f(i)表示0~i共有多少种划分方式,则$f(j)=\sum_ ...

最新文章

  1. rsync+inotify实现数据的实时备份
  2. go1.5及以上版本交叉编译
  3. 【Python】str转datetime与datetime计算
  4. poj2112 二分最大流+Floyd
  5. Vue根据条件添加click事件
  6. python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分
  7. 数据结构中图的一些定义
  8. adf可以自定义溶剂吗_ADF Faces。 立即的自定义客户端事件
  9. vuex 源码分析_前端入门之(vuex-router-sync解析)
  10. 数组c语言什么时候学的,C语言学习之数组
  11. Python-将一个列表的数据复制到另一个列表中
  12. Mini-Batch 、Momentum、Adam算法的实现
  13. 下载VCForPython27.msi
  14. stringify中文乱码?
  15. [NOIP2011]铺地毯 D1 T1
  16. 秦岚微博之夜喜提热搜第一 优雅公主裙演绎真人版辛德瑞拉
  17. nux下导入、导出mysql数据库命令
  18. 安装Redis使用make命令出现make /bin/sh: cc: 未找到命令 make[1]: 离开目录“/usr/local/mytools/redis-5.0.0/src“
  19. 美团即时零售的优势不止“快”
  20. Windows 同时访问内网和外网解决方案

热门文章

  1. oc与swift混编教程
  2. 关于4G 5G 基站覆盖范围的几个重要数据
  3. c语言fread无法存储,在用fwrite,fread为什么出现内存问题?????
  4. Vue UI组件库以及 Element UI 使用
  5. 雨流计数法python程序_雨流计数法及其在程序中的具体实现
  6. Ranger1.2.0审计模块学习
  7. SOT23-6封装 小封装 超精简外围PD Sink端取电协议芯片
  8. 接口幂等性校验,太优雅了
  9. DenseNet(Densely Connected Convolutional Networks)学习笔记
  10. 我们分析了200款“二次元游戏”,最终发现了这些