博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】
阅读量:6002 次
发布时间:2019-06-20

本文共 4594 字,大约阅读时间需要 15 分钟。

思路:先按从小到大排序, 然后从最快的開始比(如果i, j 是最慢的一端, flag1, flag2是最快的一端 ),田的最快的大于king的 则比較,如果等于然后推断,有三种情况:

一:大于则比較,二等于在推断田的最慢的是不是比king的最快的慢,三小于则与king的最快的比較;

Tian Ji -- The Horse Racing

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17266    Accepted Submission(s): 5015
Problem Description
Here is a famous story in Chinese history.
"That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and others."
"Both of Tian and the king have three horses in different classes, namely, regular, plus, and super. The rule is to have three rounds in a match; each of the horses must be used in one round. The winner of a single round takes two hundred silver dollars from the loser."
"Being the most powerful man in the country, the king has so nice horses that in each class his horse is better than Tian's. As a result, each time the king takes six hundred silver dollars from Tian."
"Tian Ji was not happy about that, until he met Sun Bin, one of the most famous generals in Chinese history. Using a little trick due to Sun, Tian Ji brought home two hundred silver dollars and such a grace in the next match."
"It was a rather simple trick. Using his regular class horse race against the super class from the king, they will certainly lose that round. But then his plus beat the king's regular, and his super beat the king's plus. What a simple trick. And how do you think of Tian Ji, the high ranked official in China?"
Were Tian Ji lives in nowadays, he will certainly laugh at himself. Even more, were he sitting in the ACM contest right now, he may discover that the horse racing problem can be simply viewed as finding the maximum matching in a bipartite graph. Draw Tian's horses on one side, and the king's horses on the other. Whenever one of Tian's horses can beat one from the king, we draw an edge between them, meaning we wish to establish this pair. Then, the problem of winning as many rounds as possible is just to find the maximum matching in this graph. If there are ties, the problem becomes more complicated, he needs to assign weights 0, 1, or -1 to all the possible edges, and find a maximum weighted perfect matching...
However, the horse racing problem is a very special case of bipartite matching. The graph is decided by the speed of the horses --- a vertex of higher speed always beat a vertex of lower speed. In this case, the weighted bipartite matching algorithm is a too advanced tool to deal with the problem.
In this problem, you are asked to write a program to solve this special case of matching problem.
 
Input
The input consists of up to 50 test cases. Each case starts with a positive integer n (n <= 1000) on the first line, which is the number of horses on each side. The next n integers on the second line are the speeds of Tian’s horses. Then the next n integers on the third line are the speeds of the king’s horses. The input ends with a line that has a single 0 after the last test case.
 
Output
For each input case, output a line containing a single number, which is the maximum money Tian Ji will get, in silver dollars.
 
Sample Input
 
3 92 83 71 95 87 74 2 20 20 20 20 2 20 19 22 18 0
 
Sample Output
 
200 0 0
 
#include
#include
using std::sort;int cmp( int a, int b ){ if( a < b ) return true; return false;}int main(){ int t[1005], k[1005], n, i, j, c; while( scanf( "%d", &n ), n ) { c = 0; for( i = 0; i < n; i ++ ) scanf( "%d", &t[i] ); sort( t, t+n, cmp ); for( i = 0; i < n; i ++ ) scanf( "%d", &k[i] ); sort( k, k + n, cmp ); i= j = 0; int flag1= n-1, flag2 = n-1;//flag1是田的 while( i <= flag1 ) { if( t[flag1] > k[flag2] ) { ++c; --flag1; --flag2; } else if( t[flag1] == k[flag2] ) { if( t[i]>k[j] ) { ++c; ++i; ++j; } else if( t[i] == k[j] ) { if( t[i] < k[flag2] ) --c; //注意这处wa了好几次 ++i; --flag2; } else if( t[i] < k[j] ) { --c; ++i; --flag2; } } else { --c; ++i; --flag2; } } printf( "%d\n", c*200 ); }}

转载地址:http://cvbmx.baihongyu.com/

你可能感兴趣的文章
关于手势处理
查看>>
super
查看>>
5G美洲白皮书:5G开源的现状(pdf)
查看>>
世界移动通信大会
查看>>
基于Spring Security Role过滤Jackson JSON输出内容
查看>>
从设计者的角度看 React
查看>>
js常见问题
查看>>
CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境
查看>>
71. Simplify Path
查看>>
海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践
查看>>
PAT A1043
查看>>
JavaScript之手写Promise
查看>>
PHP_SELF变量解析和重复路径解决
查看>>
git 命令行使用(基础篇)
查看>>
Vue笔记(五)——Token&生命周期
查看>>
《前端十年心路-我把一切告诉你》的书稿大纲&问题收集
查看>>
CSS居中总结大全
查看>>
Elasticsearch 参考指南(安装X-Pack)
查看>>
[LintCode] 604. Design Compressed String Iterator
查看>>
微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators!
查看>>