Tian Ji -- The Horse Racing

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

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
题目链接(二)NYOJ364
设田忌为a,国王为b,如果两队所有未比赛的马中,先对速度从大到小排序,然后:一、如果a的最快速度大于b的最快,则直接a的最快与b的最快比赛,赢一场;二、如果a的最快速度小于b的最快,则用a的最慢浪费b的最快,输一场;三、如果a的最快速度等于b的最快,则:
1.如果a的最慢速度大于b的最慢,则直接a的最慢与b的最慢进行比赛,赢一场;2.如果b的最慢速度小于b的最慢,则用a的最慢浪费b的最快,输一场;3.如果a的最慢速度等于b的最慢,即a与b的最慢与最快分别相等,则:先用a的最慢与b的最快比,然后找出新的最快和最慢,重复上面的比较,直到所有马都比完。代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{return a>b;
}
int main()
{int n,i,win,ti,tj,ki,kj;int T[1005],K[1005];//T表示田忌,K表示Kingwhile(scanf("%d",&n)!=EOF&&n!=0){for(i=0;i<n;i++)scanf("%d",&T[i]);for(i=0;i<n;i++)scanf("%d",&K[i]);sort(T,T+n,cmp);sort(K,K+n,cmp);  //对马的速度从大到小排序ki=ti=0;kj=tj=n-1;  //t表示田忌,k表示kingfor(i=0,win=0;i<n;i++)  //开始时win=0,即不输也不赢{if(T[ti]<K[ki])  //田忌最快的马比国王最快的马慢,用最慢的马与国王最快的马比{tj--;ki++;win--;}else if(T[ti]>K[ki])  //田忌最快的马比国王最快的马快,用最快的马与国王最快的马比{ki++;ti++;win++;}else  //最快速度相同{if(T[tj]>K[kj])  //田忌最慢的马比King最慢的马快,用最慢的与king最慢的比{tj--;kj--;win++;}else if(T[tj]<K[kj])//田忌最慢的马比King最慢的马慢,用最慢的与king最快的比{tj--;ki++;win--;}else  //最慢速度和最快速度都相同{if(T[tj]<K[ki]) //先用田忌的慢马与king的快马比,再用田忌的快马与king的慢马比{tj--;ki++;win--;}}}}printf("%d\n",win*200);}return 0;
}

下面是一个简单好想的代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
int t[1005], k[1005];
int main()
{int n, i;while(~scanf("%d",&n) && n){for(i = 0; i < n; i++)scanf("%d",&t[i]);for(i = 0; i < n; i++)scanf("%d",&k[i]);sort(t, t+n);sort(k, k+n);int ans = 0;int l1 = 0, r1 = n - 1, l2 = 0, r2 = n - 1;while(l1 <= r1){if(t[l1] > k[l2]){ans++;l1++;l2++;}else if(t[r1] > k[r2]){ans++;r1--;r2--;}else{if(t[l1] < k[r2]) ans--;l1++;r2--;}}printf("%d\n",ans*200);}return 0;
}

hdu 1052 Tian Ji -- The Horse Racing相关推荐

  1. HDU 1052 Tian Ji -- The Horse Racing

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1052 题意:田忌赛马,贪心 #include<iostream> #include<al ...

  2. 杭电1042c语言循环,HDU杭电1052 Tian Ji - The Horse Racing答题报告

    HDU杭电1052 Tian Ji -- The Horse Racing解题报告 本人第一次写博客,希望各位大神多多指导与包涵,不足的地方还请指出,新手在此谢过啦!!! 题目描述: Time Lim ...

  3. 贪心法田忌赛马问题Java代码,hdoj 1052 Tian Ji - The Horse Racing【田忌赛马】 【贪心】...

    hdoj 1052 Tian Ji -- The Horse Racing[田忌赛马] [贪心] 思路:先按从小到大排序, 然后从最快的开始比(假设i, j 是最慢的一端, flag1, flag2是 ...

  4. HDU杭电1052 Tian Ji -- The Horse Racing解题报告

    本人第一次写博客,希望各位大神多多指导与包涵,不足的地方还请指出,新手在此谢过啦!!! 题目描述: Time Limit: 2000/1000 MS (Java/Others)    Memory L ...

  5. hdu-1052 Tian Ji -- The Horse Racing

    HOT!!! 欢迎参加"金山西山居-2013创意游戏程序挑战赛"! Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Ja ...

  6. Tian Ji -- The Horse Racing(田忌赛马)/贪心算法

    Tian Ji – The Horse Racing(田忌赛马) 田忌赛马的故事 (可以直接看题) Here is a famous story in Chinese history. "T ...

  7. OpenJudge Tian Ji -- The Horse Racing

    目录 Tian Ji -- The Horse Racing 要求: 描述: 输入 : 输出: 样例输入: 样例输出: 问题分析: 情况一: 情况二: 情况三: 最终代码: 总结: 其他思路: Tia ...

  8. Tian Ji -- The Horse Racing(贪心+STL)

    Problem:Tian Ji – The Horse Racing Description: Here is a famous story in Chinese history. "Tha ...

  9. 贪心算法 003:Tian Ji -- The Horse Racing

    003:Tian Ji – The Horse Racing 总时间限制: 5000ms 内存限制: 65536kB 描述 Here is a famous story in Chinese hist ...

最新文章

  1. 这届留学生太惨!美国高校不复课,特朗普政府却要断他们签证;吴恩达:糟糕透顶...
  2. 举两个栗子:如何正确建立个人的机器学习项目集
  3. 浅谈ASP.net中的DataSet对象
  4. Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)下
  5. CSDN博客转载攻略
  6. 栈——用顺序表实现栈操作
  7. 分布式事物一致性设计思路
  8. 如何取得select结果数据集的前10条记录。postgresql
  9. Problem B: 编写函数:求最大公约数gcd()和最小公倍数lcm() (Append Code) 山东科技大学 oj
  10. VC开发过程中数据类型不兼容的问题
  11. vuex使用及自定义Vue指令vue-permission
  12. 移植UE4的Spline与SplineMesh组件到Unity5
  13. 远程登录shell命名sftp_开发好物推荐13强于XShell远程连接FinalSHell
  14. 电子/自动化专业常用软件介绍
  15. 关系数据理论详解(模式分解与四大范式)
  16. 另一种blast2go的思路
  17. [iOS]苹果开发证书 一个证书多人开发 注意项
  18. java星星闪烁代码_jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
  19. 高级计划排程(APS)算法框架学习
  20. 小程序开发--地区选择四级联动(选择省,市,县,镇)

热门文章

  1. 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。...
  2. 面试宝典系列-PHP变量在内存中的存储方式
  3. (转) OpenLayers3基础教程——OL3 介绍control
  4. Asp中解决AJAX乱码问题
  5. Swift - final关键字的介绍,以及使用场景
  6. 图片任意放大缩小 插件
  7. stable_sort
  8. 输出和为n的所有的连续自然数序列
  9. 《智慧书》格言211-220
  10. 借助Sniffer分析网络流量