计蒜客 - 渊子赛马
时间限制 1000ms 空间限制 65536K
题目描述
赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为“战国时期”。在魏国作官的孙膑,因为受到同僚庞涓的迫害,被齐国使臣救出后,到达齐国国都。赛马是当时最受齐国贵族欢迎的娱乐项目。上至国王,下到大臣,常常以赛马取乐,并以重金赌输赢。田忌多次与国王及其他大臣赌输赢,屡赌屡输。一天他赛马又输了,回家后闷闷不乐。孙膑安慰他说:“下次有机会带我到马场看看,也许我能帮你。”孙膑仔细观察后发现,田忌的马和其他人的马相差并不远,只是策略运用不当,以致失败。比赛前田忌按照孙膑的主意,用上等马鞍将下等马装饰起来,冒充上等马,与齐王的上等马比赛。第二场比赛,还是按照孙膑的安排,田忌用自己的上等马与国王的中等马比赛,在一片喝彩中,只见田忌的马竟然冲到齐王的马前面,赢了第二场。关键的第三场,田忌的中等马和国王的下等马比赛,田忌的马又一次冲到国王的马前面,结果二比一,田忌赢了国王。就是这么简单,现在渊子也来赛一赛马。假设每匹马都有恒定的速度,所以速度大的马一定比速度小的马先到终点(没有意外!!)。不允许出现平局。最后谁赢的场数多于一半(不包括一半),谁就是赢家(可能没有赢家)。渊子有 N(1≤N≤1000) 匹马参加比赛。对手的马的数量与渊子马的数量一样,并且知道所有的马的速度。聪明的你来预测一下这场世纪之战的结果,看看渊子能否赢得比赛。
输入格式
输入有多组测试数据。每组测试数据包括 3 行:第一行输入 N(1≤N≤1000)。表示马的数量。第二行有 N个整型数字,即渊子的 N匹马的速度。第三行有 N 个整型数字,即对手的 N 匹马的速度。当 N为 0 时退出。
输入格式
若通过聪明的你精心安排,如果渊子能赢得比赛,那么输出YES
。否则输出NO
。
样例输入
5
2 3 3 4 5
1 2 3 4 5
4
2 2 1 2
2 2 3 1
0
样例输出
YES
NO
思路
这是一道明显的贪心问题,但是最优贪心策略很不好想。首先为了方便操作我们把田忌和齐王的马的速度分别存入两个数组中并排序。接下来就是怎么取选择最优比赛方案的问题了。
我先比较两个人最慢的马的速度。即最慢为slow,最快为fast,田忌是1,齐王是2
1.若slow1 < slow2 那么田忌最慢的马出场必输无疑,所以不如和fast2比,为自己的队友争取更大的胜利机会
2.若 slow1 > slow2 齐王派出slow2时田忌一定会赢,那么就让这两匹马比赛,田忌最慢的马还能获得一场胜利
3.若 slow1 == slow2 这时不好判断该如何进行比赛,在进一步对fast1,fast2分类讨论
(1)若 fast1 < fast2 那么齐王派出fast2时田忌必输无疑,所以就让此时的slow1和fast2比较,为自己的队友争取更大的胜利机会
(2)若 fast1 > fast2 那就发挥fast1的最大价值,干掉fast2还能带来一场胜利
(3)若 fast1 == fast2 这时最慢的马和最快的马都一样快,接下来对这一点做专门的分析。
首先,我们要得出一个结论就是,最优的情况是不会超过两局不同比分的平局的,假如比分1-1,2-2,3-3平3场不如这样比1-3,2-1,3-2可以赢2场输一场。然后继续分析,当两人最慢的马和最快的马都一样快时,有以下几种情形
<1>若 slow1 ==fast1 即这几匹还没有比赛的马速度全一样,那就不管怎么比都是平局了,不妨让slow1和fast2去比。
<2>现在slow1只有两种选择,要么和slow2打平,要么根据之前的推理输给fast2。若 slow1 != fast1 这时除去slow1,slow2,fast1,fast2剩下的马的最优解里面
(a.) 如果有平局情况,再让slow1和slow2比,fast1和fast2比就至少有3局平局,根据刚刚的结论(红字)这肯定不是最优解,所以应该让slow1和fast2比平局更少,结果更优。
(b.) 没有平局情况,那么slow1和slow2打平,fast1和fast2打平和slow1输给fast2,fast1赢得slow2的结果是一样的。所以也可以让slow1和fast2去比。
综上,最快最慢都相等这种情况下应该让slow1和fast2比才能获得最优解。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;int n;
int a[1050], b[1050];void solve() {int ans = 0;int ai = 0, bi = 0, aj = n - 1, bj = n - 1;for (int i = 0; i < n; i++) {//循环一次,比赛一场if (a[ai] > b[bi]) {//田忌最慢的马比齐王最慢的马快,这两匹马比,胜局+1ai++;bi++;ans++;}else if (a[ai] < b[bi]) {//田忌最慢的马比齐王最慢的马慢,那这匹马上肯定输,所以就把齐王最快的马拉下水ai++;bj--;ans--;}else {//田忌最慢的马和齐王最慢的马速度一样,再去看最快的马if (a[aj] > b[bj]) {//田忌最快的马比齐王最快的马快,这两匹马比,胜局+1aj--;bj--;ans++;}else if (a[aj] < b[bj]) {//田忌最快的马比齐王最快的马慢,也就是说齐王出这匹马田忌肯定输,所以田忌用最慢的马和它比,把它拉下水ai++;bj--;ans--;}else {//两个人最快马和最慢马的速度都相等,用田忌最慢的马和齐王最快的马比ai++;bj--;if (a[ai] < b[bj]) ans--;/*这里有个很细很细的细节,就是田忌最慢的马有可能和齐王最快的马速度相等,比如数据35 5 55 5 5这种情况下是平局,所以不会输*/ }}}printf("%s\n", ans > 0 ? "YES" : "NO");
}int main() {while (scanf("%d", &n) == 1 && n) {for (int i = 0; i < n; i++)scanf("%d", &a[i]);for (int i = 0; i < n; i++)scanf("%d", &b[i]);sort(a, a + n);sort(b, b + n);solve();}return 0;
}
计蒜客 - 渊子赛马相关推荐
- 计蒜客2020蓝桥杯大学A组模拟赛题解
计蒜客2020蓝桥杯大学A组模拟赛题解 蓝桥杯的话,去年拿了C++组的国二.今年报名了新成立的Python组,不知道能不能摸到国一的鱼 模拟赛链接如下: https://www.jisuanke.co ...
- 计蒜客 挑战难题 爬楼梯
计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...
- 无脑博士的试管们java_计蒜客 无脑博士和他的试管们
标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...
- 最短路(遍历边)计蒜客—DD坐地铁
题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...
- K - Triangle 计蒜客 - 42405
K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...
- H - Prince and Princess 计蒜客 - 42402
H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...
- C - Digital Path 计蒜客 - 42397 05-29
C - Digital Path 计蒜客 - 42397 题意: 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走,而且下一个位置必须比当前位置的数字大1,入口和出口必须数边缘元素, ...
- 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...
在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年.人才过剩,而对于企业HR来说永远都招不到称心如意的人才.这个怪圈在"计蒜客"创始人俞昊然看来,主要是因为当今高校的教学资源 ...
- 计蒜客 - T1012 A*B问题
计蒜客 - T1012 A*B问题 相信你已经学会 A+B 问题了,那么问题又来了- 输入两个正整数 A 和 B ,求 A×B. 输入格式 一行,包含两个正整数 A 和 B,中间用单个空格隔开. 1≤ ...
最新文章
- R语言协方差分析(analysis of covariance)实战:协方差分析ANCOVA(analysis of covariance)(检查模型假设)、拟合协方差分析ANCOVA模型、事后分析
- 验证证书有效期_笔试查分前,教资考试4个有效期你到底弄清楚了没?逾期不补!...
- HDU4825 Xor Sum —— Trie树
- 链表相交以及找循环链表入口
- POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)
- Erlang/Elixir 社区摘要: 2016-05-21
- php mysql单引号 双引号_php单引号、双引号与数据库
- Ajax开发框架(上)[整理]
- 【SQL】正则表达式-校验数字,字符,特殊需求等
- Java发送https请求,综合post请求,get请求,获取网络返回的信息
- 【机器学习基石】感知机模型+PLA(二)
- 编辑邮件时去掉回车光标跟随
- C++实现各种进制转换
- Jetson TX2使用记录
- 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
- 3d max材质贴图
- 18、Python第二节
- 西瓜视频官方缩短域名网址接口v.ixigua.com生成原理解析
- c# 弹出虚拟键盘关闭虚拟键盘(适用win10、win7)学习记录(转载)
- exure9 秘钥_AxureRP9.0秘钥(持续更新)