题目描述

你在桥上看风景
看风景的人在楼上看你
明月装饰了你的窗子
你装饰了我的梦
这是GG在长坂坡发出的感叹。

三年前GG莫名的穿越到了三国时期,在这三年里他看尽了各种杀戮,心里早已麻木。GG他渴望和

平,他渴望每个人都能够和平相处,相近如宾,但是纵使他驰骋沙场多年,也无法改变三国鼎立的局面,
也无法阻止各地杀戮的发生。他很心痛。直到有 一天,有一个人的到来解开了他多年的心结。他就是楼
天城,人称楼教主。他的到了使GG更加坚定了他的初衷,并且经过楼教主的点拨,他茅塞顿开,开创了
他自己的一套战争法则。 于是乎!GG不断的游说在各国之间,不断的向各国君主灌输和平战争的理念,
经过多年的努力,GG终于成功的劝说了A国和B国的国王放弃杀戮,改为和平战争的形式来维护自己国家
的主权和人民的安全。之后在每次的战争之中,A国和B国都沿用了GG的战争法则。
GG的战争法则是这样的:
首先A国的国王ZSGG和B国的国王EAGLE,他们分别随机抽取了n张牌(n<=100),牌的种数只有
三种,分别为Kill,Peach和Flash,他们一开始都各自拥有一滴血,Kill牌可以让对方掉一滴血;Flash牌可
以躲避对方的Kill牌,使自己不掉血;Peach牌可以为自己补一滴血.现在每次战争分为多个回合,每个回合
双方都可以出任意一种牌,只能出一张,后手可以选择不出牌,但是先手必须出牌。先手为每个回合先出牌
的国王,后手为每个回合后出牌的国王.A国和B国的国王轮流当先手,即第一回合ZSGG先出牌,第二回合
EAGLE先出牌,第三回合ZSGG先出牌,第四回合EAGLE先出牌,以此类推。
在每个回合中,GG是这样设定:
1.对于先手来说,如果他有Kill牌,则他会优先出Kill牌.如果没有Kill牌,那么他只能出另外两种牌中的一种(假
设他拥有Flash和Peach),但对对方无伤害.
2.对于后手来说,他只能防御或者补血,而不能出Kill牌反击,因为GG不准.
127.0.0.1
3.如果先手没牌出,则该回合结束,继续下一回合.
4.双方都没牌出时,战争结束,或者在战争途中,任意一方先死的,战争都会立即结束,而活着的一方将赢得战
争胜利.
5.如果战争结束后双方都还活着,则血量多的一方将赢得战争的胜利,血量相同的则双方打平,皆(sang)大
(xin)欢(bing)喜(kuang)。而作为胜利者,将会得到GG独家赞助的萌萌哒气球....
6.在每场战役中如果ZSGG赢得胜利,则输出The X battle's winner is ZSGG.;如果EAGLE赢得胜
利,则输出The X battle's winner is EAGLE.;否则双方打平,则输出The X battle's winner is Both.。
( X表示第几场战役。) 具体的请看输出。

输入

输入T组数据,代指T场战役。(T<=200)每组数据第一行输入n。接下来输入(n + n)行。前n行指代A国的

牌,后n行指代B国的牌。每一行代指牌的种类(Kill,Peach,Flash);

输出

对于每组数据,按题目要求输出。(请仔细看题目输出格式)

样例输入

3
2
Peach
Peach
Flash
Peach
2
Kill
Flash
Flash
Flash
1
Flash
Peach

样例输出

The 1st battle's winner is ZSGG.
The 2nd battle's winner is Both.
The 3rd battle's winner is EAGLE.

提示

第1到23的序数词写法.(英语缩写) 1st,2nd,3rd,4th,5th,6th,7th,8th,9th,10th,11th,12th,

13th,14th,15th,16th,17th,18th,19th,20th,21st,22nd,23rd.

解析:首先,必须厘清这道题的逻辑:

若我是先手,有杀只能出杀,这是规则里面明确规定了的;

如果没有杀,那就尽量出桃,因为桃子只能补一滴血,这是早晚的事儿,早晚都是只能顶一滴血

如果没有桃,那就坑了,你出闪相当于白白的流失一张牌,对你没有丝毫的好处.但是你必须出,因为规则说了,先手若有牌必须出牌.

若你是后手,并且敌人出了杀.你就要尽量躲避这张杀:闪或者桃.尽量用闪,因为桃还有别的用处,而闪只有一种用途.

若你没闪,那就出一张桃吧!若你没桃,你就掉血吧!

-----------------------------------------

|  先手    |   后手且先手出的是杀  |

-----------------------------------------

|   杀       |                      闪               |

----------------------------------------

|   桃       |                      桃               |

----------------------------------------

|   闪      |                     掉血           |

---------------------------------------

根据上面这个规律已经可以写出一个模拟程序了,这道题复杂度O(200*100),简直小.用模拟完美解决,又快又对.

虽然如此,一旦数据量大了,模拟法必定超时.很显然,这个游戏的对战过程十分机械,完全可以用计算的方法求出来.

还有一些规律:桃和闪是防御牌,杀是攻击牌.

所以任何一个对局都分为两个阶段:对杀阶段(你杀我我杀你,你闪我也闪);

吊打阶段(我打你你打我).

如果对杀阶段,你就跪了,那我就笑了.

如果到了吊打阶段,计算出被吊打者最多能够承受多少张杀.

你若是先手,你出桃,我指定不搭理你.留着就行了.

你若是先手,你出闪,我指定也不搭理你.

#include<stdio.h>
struct Man
{int kill, peach, flash;int num;Man(int x){kill = peach = flash = 0;num = x;}void show(){printf("num: %d kill:%d  peach:%d   flash:%d\n", num, kill, peach, flash);}
};
int ifKill(Man&a, int k){if (k <= a.peach + a.flash)return -1;else return a.peach + a.flash + 1;
}
void suffer(Man&a, int k){if (k>a.flash){k -= a.flash;a.peach -= k;a.flash = 0;}else{a.flash -= k;}
}
int go(Man&a, Man&b){int akb = ifKill(b, a.kill);int bka = ifKill(a, b.kill);if (akb != -1){if (akb <= bka)return 1;else return 2;}if (a.kill<b.kill){suffer(a, a.kill);suffer(b, a.kill);b.kill -= a.kill;a.kill = 0;int sum = a.flash + a.peach;int x = sum >> 1;int survive = x;if (sum & 1){if (a.flash>x){survive += a.peach;a.flash -= (x + 1 - a.peach);}else{survive += x + 1;}}else{if (a.flash>x){survive += a.peach;a.flash -= (x - a.peach);}else{survive += x;}}if (survive<b.kill){return 2;}else{suffer(a, b.kill);}}else if (a.kill>b.kill){suffer(a, b.kill);suffer(b, b.kill);a.kill -= b.kill;b.kill = 0;int sum = b.peach + b.flash;int x = sum >> 1;int survive = x;if (sum & 1){survive++;if (b.peach <= x){survive += b.peach;b.flash -= (x - b.peach);}else{survive += x;}}else{if (b.peach <= x){survive += b.peach;b.flash -= (x - b.peach);}else{survive += x;}}if (survive<a.kill){return 1;}else{suffer(b, a.kill);}}else{suffer(a, b.kill);suffer(b, a.kill);}if (a.peach>b.peach)return 1;else if (a.peach<b.peach)return 2;else return 0;
}
void input(Man&a, int size)
{char x[20];for (int i = 0; i<size; i++){scanf("%s", x);if (x[0] == 'P')a.peach++;else if (x[0] == 'K')a.kill++;else a.flash++;}
}
char who[][10] = { "Both", "ZSGG", "EAGLE" };
void output(int t, int ans)
{printf("The %d", t);if ((t / 10) % 10 != 1){if (t % 10 == 1)printf("st");else if (t % 10 == 2)printf("nd");else if (t % 10 == 3)printf("rd");else printf("th");}else printf("th");printf(" battle's winner is %s.\n", who[ans]);
}
int main()
{// freopen("C:\\Users\\weidiao\\Documents\\JavaProject\\javaProject\\实验室\\in.txt","r",stdin);int T;scanf("%d", &T);for (int t = 1; t <= T; t++){int size;scanf("%d", &size);Man a(1), b(2);input(a, size);input(b, size);int ans = go(a, b);output(t, ans);}return 0;
}/**************************************************************
Problem: 1544
User: 20124003
Language: C++
Result: 正确
Time:3 ms
Memory:800 kb
****************************************************************/

转载于:https://www.cnblogs.com/weiyinfu/p/5013885.html

东大OJ-1544: GG的战争法则相关推荐

  1. 东大OJ 2SAT 异或

    看了十年才懂懂了十年才会会了十年才会写写了十年才写完写完了十年才能改对 #include<stdio.h> #include<string.h> struct res{int ...

  2. 东大OJ-Max Area

    1034: Max Area 时间限制: 1 Sec  内存限制: 128 MB 提交: 40  解决: 6 [提交][状态][讨论版] 题目描述 又是这道题,请不要惊讶,也许你已经见过了,那就请你再 ...

  3. 经济学人:人工智能正颠覆传统战争,一场新军备竞赛或将开启

    大数据文摘出品 来源:Economist 编译:赵伟.楚阳.武帅 今年阅兵的两个大杀器--DF-17和DF-41被广泛关注,然而文摘菌却从三个无人作战方队中,看到了一丝不寻常. 无人作战与人工智能的发 ...

  4. 朱清时的10本推荐书

    http://www.yph-cn.com/info-8677.html 青少年之家小编曾在网站上介绍过很多适合青少年阅读的书籍.今天,小编将要带来的是朱清时推荐的10本书.喜欢阅读的青少年朋友赶紧看 ...

  5. 马云:新一轮军备竞赛因为人工智能将会开启

    大数据文摘出品 来源:Economist 编译:赵伟.楚阳.武帅 今年阅兵的两个大杀器--DF-17和DF-41被广泛关注,然而文摘菌却从三个无人作战方队中,看到了一丝不寻常. 无人作战与人工智能的发 ...

  6. 日本首富——孙正义的传奇

    日本首富--孙正义 财富档案 日本首富,著名的互联网风险投资公司"软件银行"的创立者,公司的资产约300亿美元,个人的身价约为40亿美元,日本传媒称之为"带动日本走出网络 ...

  7. XJTU2017Robocon少年的总结

    总结 比赛完了很多天了啊,那些遗憾的感觉都渐渐消去. 这一届队员真的特别好.他们的热情和付出都很大,他们得到了收获,希望他们更上一层楼. 这一届组委会需要改进.从飞盘的改版到赛场上的判决都有许多需要反 ...

  8. 分数四则运算法则c语言,△【OJ】(二)---C---分数类的四则运算

     题目要求如下: -- --- ---------------------------------------------------------------------------------- ...

  9. gg 修改器游戏被保护_火柴人战争遗产无敌版修改器下载-火柴人战争遗产修改器手机版下载...

    详情 火柴人战争遗产无敌版修改器是一款游戏辅助工具,在这款手游中修改就能请送货的无限钻石.金币等属性,简单的操作安全无污染,让你成为最强大的存在,内置修改器完全不会被封号哦,免费开箱子,强制升级.训练 ...

最新文章

  1. 我的hadoop学习之路
  2. 计算机设备管理器不显示com,台式机设备管理器打开是空白怎么办_win10设备管理无法显示解决方法...
  3. GDLiveStreaming视频推送RTMP
  4. reactNative 计算时间差
  5. ionic 实用技巧
  6. Lua直接调用动态链接库(DLL或so文件)
  7. 关于在hue当中调shell脚本的操作(这里的shell 脚本是在shell脚本当中嵌套shell脚本的操作使用source的方式)...
  8. 如何检测 SAP 电商云 Spartacus UI 当前正处于导航状态
  9. [Bug]Object reference not set to an instance of an object.
  10. buntu下shell脚本运行异常:bash和…
  11. 精英网络技术论坛免杀基础
  12. FC SAN、IP SAN、IB SAN
  13. 【wpa_supplicant】入门 eloop 机制
  14. vm服务器复制文件,怎么实现从宿主机拖动复制文件到虚拟机VM中的示例
  15. Android SDK是什么
  16. smoothdraw4_使用SmoothDraw享受徒手绘制和图像修改
  17. 北京地铁,4号线换乘13号线,用时最短换乘线路
  18. GS | 交互命令说明
  19. iOS tableView 右侧索引视图状态获取
  20. C++虚函数实现机制

热门文章

  1. OpenCV 离散傅里叶变换
  2. leetcode Longest Consecutive Sequence
  3. ceph rbd双挂载导致ext4文件系统inode链接数据污染
  4. 【BZOJ4561】[JLoi2016]圆的异或并
  5. 初学python之生成器
  6. 面向对象的JavaScript-007-Function.prototype.bind() 的4种作用
  7. 第三届蓝桥杯决赛c++b组
  8. 第五章 常用页面元素自动化操作(上)
  9. KVO(NSKeyValueObserving)、KVC(NSKeyValueCoding)作用浅谈
  10. 《菜菜的机器学习sklearn课堂》聚类算法Kmeans