uvalive 3266
来源:互联网 发布:卫视直播软件哪个好 编辑:程序博客网 时间:2024/06/03 20:19
题意:田忌要和国王赛马,双方各有n只马,赢一场得200,输一场,失200,平局不给钱;问怎么安排田忌赚最多;
思路:排序后,将国王的马从大到小找到a中匹配的马,用set和二分搞定这个步骤,然后得到最多的胜场数,然后将未匹配的a和b中的马倒序匹配。就是答案了。
#include <bits/stdc++.h>using namespace std;const int maxn = 1000 + 5;int a[maxn], b[maxn], visa[maxn], visb[maxn];multiset<pair<int,int>>s;int main(){ int n; while(~scanf("%d", &n)) { if(n == 0) break; s.clear(); for(int i = 0; i < n; i++) scanf("%d", &a[i]), visa[i] = 0; for(int i = 0; i < n; i++) scanf("%d", &b[i]), visb[i] = 0; sort(a, a + n); sort(b, b + n); for(int i = 0; i < n; i++) s.insert({a[i], i}); int win = 0; for(int i = n - 1; i >= 0; i--) { multiset<pair<int, int>>::iterator it = s.lower_bound({b[i] + 1, 0}); if(it != s.end()) { visa[it->second] = visb[i] = 1; s.erase(it); win++; } } int p = n - 1, lose = 0; for(int i = 0; i < n; i++) { if(visa[i] == 1) continue; while(p >= 0 && visb[p] == 1) p--; if(p < 0) break; if(a[i] < b[p]) lose++; p--; } printf("%d\n", 200 * (win - lose)); } return 0;}
阅读全文
0 0
- uvalive 3266
- uvalive 3266(贪心)
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- java IO 详解(一)
- Git commands
- DNS相关的一些知识
- 改进排序算法:堆排序(对简单选择排序的改进)
- 继承和多态
- uvalive 3266
- 解决Could not resolve host: github.com; Unknown error
- Mysql分页处理(PageHelper)
- UML基础小结
- android studio 读取assets文件夹下的文件
- 自定义对象
- gensim
- 设计一个波浪计数器
- 6.面向对象--继承