有点小坑的模拟题,先解释下题意:

三国杀的简化版本,牌型有杀,闪,桃,万箭齐发,南蛮入侵,决斗

玩家是JS和DZ,JS行动一个回合,如果JS可以打死DZ,那么JS胜;否则DZ胜

题中解释的是:

杀只能用一次,必须响应,那么我们可以采取如下的贪心策略:

我们的目标是尽可能让DZ去死,那么就要集中火力打掉他的闪和杀(他的万箭齐发,南蛮入侵,决斗是没有用的),他的桃子可以直接计算到血量上限上去

跟DZ的闪有关的牌:

杀(只能用一次),万箭齐发(多次)

所以,我们直接把所有的万箭齐发全部用掉,尽可能的消耗DZ的闪(没有闪就掉血)

杀这张牌呢,要用贪心的思想考虑:如果DZ没有闪了,那么我们需要用这张杀(因为马上可以让他掉血,留着这张杀可能在决斗中有用,也可能没用,所以先用掉更优)

跟DZ的杀有关的牌:

决斗(多次),南蛮(多次),杀(在决斗中使用)

玩过三国杀的朋友,应该会知道又卖血这个功能的吧!比如如下这个数据:

5 2
J J J J J
K K

这个数据是JS赢的,因为先手在保证自己不被对手斗死的情况下,可以一直出决斗来浪费DZ的杀,进而可以用决斗或者南蛮入侵解决!

所以,我们在保证JS不死的前提下,一直决斗

注意决斗的规则:当JS的杀的数量不小于DZ的杀的数量时,DZ掉一血,消耗的杀的数量相等;否则,JS掉一血,DZ比JS多用一张杀

因为题中描述说有杀必须响应,所以至少把其中一个玩家的杀打光为止

接着把所有的南蛮入侵放掉,继续消耗杀(因为有可能DZ还有杀,再决斗自己就死了,所以先南蛮消耗杀,留着决斗)

最后,再把所有的决斗放掉(为什么这个时候不用保证自己不被对手斗死了呢?)

因为胜负条件:只要JS没把DZ打死,那么DZ胜;所以我们可以直接使用光所有的决斗,要么把JS打死了,要么把DZ打死了,要么数量不够

所以贪心策略:

先万箭齐发,再杀(在DZ没闪的情况),保证JS不死尽可能决斗,所有的南蛮入侵,用光决斗

代码如下:

#include<bits/stdc++.h>
using namespace std;struct People{int K,S,N,W,J,Cnt;
}A,B;
char in[10];
int T,n,m;void Add(People &X,char choose){if (choose=='K') X.K++;else if (choose=='S') X.S++;else if (choose=='N') X.N++;else if (choose=='W') X.W++;else if (choose=='J') X.J++;else if (choose=='T') X.Cnt++;
}void Clear(People &X){X.K = X.S = X.N = X.W = X.J = X.Cnt = 0;
}void Print(People X){printf("K:%d S:%d N:%d W:%d J:%d Cnt:%d\n",X.K,X.S,X.N,X.W,X.J,X.Cnt);
}int main(){//freopen("input.txt","r",stdin);scanf("%d",&T);while(T--){Clear(A);Clear(B);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%s",in);Add(A,in[0]);}for(int i=1;i<=m;i++){scanf("%s",in);Add(B,in[0]);}A.Cnt+=3;B.Cnt+=3;//所有的W用完if (A.W > 0){if (A.W >= B.S){B.Cnt = B.Cnt - (A.W - B.S);B.S = 0;}else{B.S = B.S - A.W;}}if (A.K > 0 && B.S == 0){B.Cnt--;A.K--;}//然后使用Jwhile (A.J > 0 && A.Cnt > 1){if (A.K >= B.K){A.K -= B.K;B.K = 0;B.Cnt--;}else{B.K -= (A.K+1);A.K = 0;A.Cnt--;}A.J--;}if (A.N > 0){if (A.N >= B.K){B.Cnt = B.Cnt - (A.N - B.K);B.K = 0;}else{B.K = B.K - A.N;}}while (A.J > 0 && A.Cnt > 0){if (A.K >= B.K){A.K -= B.K;B.K = 0;B.Cnt--;}else{B.K -= (A.K+1);A.K = 0;A.Cnt--;}A.J--;}if (B.Cnt <= 0) puts("JS");else puts("DZ");}return 0;
}
//zzuli_1851

附几个Hack数据:

6 3
J J J N N N
K K K6 3
J J J J J N
K K K6 3
J J J N K W
K K S4 2
J N N K
K S6 4
J K K K N N
K K K K6 3
J K K K N N
K K K8 3
J J K K K K N N
K K K K5 2
J J J N K
K K

zzuli_acm_oj 1851 KILL 小模拟相关推荐

  1. 【10.20校内测试】【小模拟】【无向图建树判奇偶环】【树上差分】

    Solution 和后面两道题难度差距太大了吧!! 显然就只是个小模拟,注意判0就行了. Code #include<bits/stdc++.h> using namespace std; ...

  2. hdu4995 (不错的小模拟)

    题意:       输入n,m,k ,给你n个点,他们在一个一维坐标上,每个点有两个值,一个是坐标,另一个是价值,然后有m组操作,每次操作给一个坐标,意思就是把当前这个坐标的点距离他最近的k个点(相等 ...

  3. CodeForces - 1526D Kill Anton(模拟)

    题目链接:https://vjudge.net/problem/CodeForces-1526D 题目大意:给出一个只有四种字母组成的字符串 AAA,要求将其重排列 BBB,使得贡献最大.贡献指的是, ...

  4. hdu4515 小模拟

    题意:       给你当期日期,问前D天和后D天的年月日. 思路:      直接模拟就行了水题,对了别忘了题目2013,3,5要输出这样的2013/03/05. #include<stdio ...

  5. 美亚杯赛前小训练,分享一套小模拟练习,弘连软件使用学习,供大家赛前训练,题目非常简单,很适合大家练手(非常推荐!)(新手手荐!)题目入门非常合适,也是了解软件很好的办法!

    话不多说,先上链接,百度网盘. 链接:https://pan.baidu.com/s/17Sl3R3PfHUuhmaPug-M6Sg?pwd=ybww 提取码:ybww --来自百度网盘超级会员V3的 ...

  6. CodeForces - 1200C——小模拟

    [题目描述] Amugae is in a very large round corridor. The corridor consists of two areas. The inner area ...

  7. ZZULIOJ 1851: KILL By Assassin

    Description众所周知,yjj发现了一款新型的益智卡牌游戏叫SGK,游戏的具体内容是这样的:(1)游戏方式:1.游戏玩家分为两人A和B,双方生命值均为3点且各拥有不超过9张的手牌.由玩家A主动 ...

  8. zoj 1851 Code Formatter 模拟

    题目链接:http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=2851 题意:给出一段代码,统计'\t'和后缀空格的个数,有一个地方要 ...

  9. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)Smzzl with Greedy Snake “小“模拟

最新文章

  1. Docker安全性支持(使用Cgroups机制实现容器资源控制)
  2. 谈谈JQuery的Deferred对象
  3. 怎样在sqlite3上执行SQL语句
  4. 【TensorFlow】实现、训练并评估简单的回归模型和分类模型
  5. 树莓派 4b 可执行文件 无法双击运行_树莓派01 - 树莓派系统安装
  6. javaio流_Java IO流
  7. 【行业专题报告】城市、智慧城市-专题资料
  8. (兼职月赚两万?)程序员如何接私活? 如何让自己的知识变现?
  9. react-native-root-siblings 在应用的根元素之后添加兄弟元素
  10. 市场调研-全球与中国安全摄像头芯片市场现状及未来发展趋势
  11. MyBatis-Plus的使用
  12. js做个随机点名的小游戏
  13. vue的form表单在提交成功后置空
  14. 免费开源CDN jsDelivr使用
  15. 如何伪原创-自媒体伪原创软件
  16. Egg Dropping Puzzle问题的分析
  17. nginx permanent 作用
  18. 晨曦记账本记账,计算每个账户的某时间段账目
  19. 大型交易系统之高并发
  20. 计算机技术类岗位英文简历,计算机科学与技术类专业英文简历模板.docx

热门文章

  1. 38.求解简单表达式。输入一个形式如“操作数  运算符  操作数”的四则运算表达式,输出运算结果,要求使用switch语句编写
  2. 【Axure教程】天猫app-导航固定位置跟随窗口滚动
  3. QT【字符串】与 【 时间 秒 毫秒】 相互转换
  4. 【STM32-宏定义】
  5. git 查看某文件状态
  6. 5 个需要知道的开源的软件定义网络(SDN)项目
  7. Mac book pro wifi 频繁掉线,解决方案
  8. 小程序没有流量怎么办?
  9. 令人惊讶的《暗月世界》
  10. Android Studio 普通工程变成JNI工程