Tyvj P1048 田忌赛马 题解
像我这种蒟蒻就非常适合做一些辣鸡题,比如一些简单的贪心题,今天偶遇田忌赛马,于是我就非常轻(费)松(力)地搞定了这道题。
题目:
时间: 1000ms / 空间: 131072KiB
描述
中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?
输入格式
第一行为一个正整数n (n <= 1000) ,表示双方马的数量。
第二行有N个整数表示田忌的马的速度。
第三行的N个整数为齐王的马的速度。
输出格式
仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。
测试样例1
输入
3
92 83 71
95 87 74
输出
200
分析:
很明显的贪心嘛~~~
首先,双方的马按速度排序。
考虑己方最弱的马和对方最弱的马的速度关系。如果对方更弱,那么不妨就用这匹马去对对方的那匹马;如果我方更弱,那么不妨用这匹马和对方当前最强的马比赛。(平局稍后再说)
同样地,可以考虑己方最强的马和对方最强的马的关系。
不停地贪心处理,直到双方最强的马相等、最弱的马也相等。
这时,强制让这两局平局发生(划掉),用我方最弱的马输给对方最强的马(显然优于划掉的),其实并不一定输,还要比较一下我方最弱的马是否与对方最强的马的速度相等,如果相等,那就不会输了。
继续处理,直到所有的马都用完。
简单吧?!
代码:
#include <bits/stdc++.h>using namespace std;typedef long long LL;
typedef double DB;int Max(int a, int b){return a > b ? a : b;}
int Min(int a, int b){return a < b ? a : b;}const int MAXN = 1e3 + 15;int a[MAXN], b[MAXN];inline int read(){int r = 0, z = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') z = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){r = r * 10 + ch - '0'; ch = getchar();}return r * z;
}bool cmp(int x, int y){return x > y;}void fre(){freopen(".in", "r", stdin);freopen(".out", "w", stdout);
}void init(){int n = read(), ans = 0;for(int i = 1; i <= n; i ++) a[i] = read();for(int i = 1; i <= n; i ++) b[i] = read();sort(a + 1, a + n + 1, cmp);sort(b + 1, b + n + 1, cmp);int h0 = 1, t0 = n, h1 = 1, t1 = n;while(h0 <= t0){if(a[h0] > b[h1]){ans ++; h0 ++; h1 ++;}else if(a[h0] < b[h1]){ans --; t0 --; h1 ++;}else if(a[t0] > b[t1]){ans ++; t0 --; t1 --;}else if(a[t0] < b[t1]){ans --; t0 --; h1 ++;}else {if(a[t0] < b[h1]){ans --; t0 --; h1 ++;}else if(a[t0] == b[h1]){t0 --; h1 ++;}}}printf("%d\n", ans * 200);
}int main(){
// fre();init();return 0;
}
Tyvj P1048 田忌赛马 题解相关推荐
- 动态规划求解限时采药问题(洛谷P1048题题解,Java语言描述)
题目要求 P1048题目链接 分析 荐读:大神博文 -> <聊聊动态规划与记忆化搜索> 这题就是一个标准的DP水题,对于不会DP的萌新,太难了!对于整天搞DP的算法大佬,水爆了! 荐 ...
- TYVJ 2002 扑克牌 题解
P2002 扑克牌 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Admin生日那天,Rainbow来找Admin玩扑克牌-- 玩着玩着Rainbow觉得太 ...
- 【贪心】田忌赛马题解
题目描述 田忌准备和齐王赛马,各自拿出的比赛马匹数是n个,胜负由每匹马的速度决定,田忌可 以自由选择自己的马和齐王的比赛,田忌赢一次赏金加50,输一次赏金赔50,田忌赚的 钱最低为0,求田忌最多能赚多 ...
- bzoj3224 Tyvj 1728 普通平衡树题解--Treap
题面: Description您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有 ...
- tyvj 2075 借教室 题解
P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院 ...
- 题解 P1650 田忌赛马
(题面来自洛谷) 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负者这 ...
- 田忌赛马java lms_题解 P1650 田忌赛马
(题面来自洛谷) 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负者这 ...
- tyvj间谍网络(强连通分量)题解
题目描述见下列网址 http://www.tyvj.cn/ (P1153) 经过对题目的分析,可以得出,题目的要求就是求出图中的强连通分量连,然后进行缩点操作,最后枚举每一个入度为0的点,如果可以有 ...
- 拯救ice-cream Tyvj P1117 题解
依旧还是BFS吧. 如果当前点是草地,则必须把草地先变成道路,拓展后的点与拓展前的点相同,并且时间+1,这样我们就保证了草地这个点经过了 两次,且时间增加了2 program P1117;constd ...
最新文章
- CodeGen融合核心关系循环扩展
- 电脑开机显示Invalidsystemdisk
- python numpy 数据类型为python对象-python numPy模块 与numpy里的数据类型、数据类型对象dtype...
- Github学习系列之Github是什么?
- 洛谷 P2867 [USACO06NOV]大广场Big Square
- 算法复杂度为O(N) 的排序算法
- Redis数据类型--散列类型
- cssbefore图片大小_我可以在CSS:before /:after伪元素中更改图像的高度吗?
- mysql 报500错误_java 项目开启mysql binlog参数后报500错误:
- LAMP架构(apache安装,apache工作原理介绍)
- LDA-math-认识Beta/Dirichlet分布
- Android手机证书安装
- 更改 matlab java 版本_64位 JDK 1.8 调用Matlab 2017b打包的jar
- 谷歌翻译退出中国市场?我们还有这个!
- 怎么将PPT中的视频文件保存下来
- WEB前端项目实战/酒仙网开发-李强强-专题视频课程
- cmake:pkg_check_modules
- iOS 核心动画的变换
- 互动媒体作业之艺术作品赏析
- Visual Stdio 中的error C2001: 常量中有换行符