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?"



C" title="Problem C">



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
题意:田忌赛马的超级版,田忌和大王赛马,但是相同等级的马谁的能跑还不一定,谁赢就能赢得对方200金币;
解题思路:这道题说是贪心还不如说成一道数学的分类讨论题,就和中学学的分类讨论太像了
1,田忌最快的马要是比大王最快的快,就比一句,田忌胜;
2,田忌最快的马比大王最快的马慢,就用田忌当前马中最慢的马和他比,田忌输;
3,田忌最快的马和大王最快的马速度相同,就要讨论最慢的马;
4,田忌的最慢的马比大王的马快,田忌胜;
5,否则,田忌输;
感悟:妈呀,这几天平均一天一道题的速度确实有点慢哈......马上就到星期天了,就能加快速了;
AC代码(G++
46MS)
#include

#include

#include

#include

#define maxn 1005

using namespace std;

struct  horses

{

    int
speed;

    char
s;

};

bool comp(horses &a,horses&b)

{

   
if(a.speed!=b.speed)

       
return a.speed>b.speed;

    else

       
return a.speed>b.speed;

}

int main()

{

   
//freopen("in.txt", "r", stdin);

    int
n,money=0,tb,te,gb,ge;

    horses
ti[maxn],god[maxn];

   
while(~scanf("%d",&n)&&n)

    {

       
money=0;

       
tb=gb=0;

       
te=ge=n-1;

       
for(int i=0;i

           
scanf("%d",&ti[i].speed);

       
for(int i=0;i

           
scanf("%d",&god[i].speed);

       
sort(&ti[0],&ti[n],comp);

       
sort(&god[0],&god[n],comp);

       
while (tb <= te)

       
{

           
if (ti[te].speed > god[ge].speed)//田忌最快的马比大王的快就赢一局

           
{

               
money++;

               
te--;

               
ge--;

           
}

           
else if (ti[te].speed < god[ge].speed)//田忌最快的马比大王的慢就输一局

           
{

               
money--;

               
te--;

               
gb++;

           
}

           
else//最快的马一样快

           
{

               
if(ti[tb].speed > god[gb].speed)//田忌最慢的马比大王的快就赢一局

               
{

                   
money++;

                   
tb++;

                   
gb++;

               
}

               
else

               
{

                   
if (ti[te].speed < god[gb].speed)//田忌的慢就输

                   
money--;

                   
te--;

                   
gb++;

               
}

           
}

           
//注意:这些最快最慢都是相对于当前还没有进行过比赛的马,每比一次状态转移

           
//一次

      
}

       
printf("%d\n",money*200);

    }

    return
0;

}

Problem C的更多相关文章

  1. 1199 Problem B: 大小关系

    求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...

  2. No-args constructor for class X does not exist. Register an InstanceCreator with Gson for this type to fix this problem.

    Gson解析JSON字符串时出现了下面的错误: No-args constructor for class X does not exist. Register an InstanceCreator ...

  3. C - NP-Hard Problem(二分图判定-染色法)

    C - NP-Hard Problem Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:262144 ...

  4. Time Consume Problem

    I joined the NodeJS online Course three weeks ago, but now I'm late about 2 weeks. I pay the codesch ...

  5. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

  6. hdu1032 Train Problem II (卡特兰数)

    题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能.    (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...

  7. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  8. [LeetCode] Water and Jug Problem 水罐问题

    You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...

  9. [LeetCode] The Skyline Problem 天际线问题

    A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...

  10. PHP curl报错“Problem (2) in the Chunked-Encoded data”解决方案

    $s = curl_init(); curl_setopt($s, CURLOPT_POST, true); curl_setopt($s, CURLOPT_POSTFIELDS, $queryStr ...

随机推荐

  1. GCD之信号量机制二

    在前面GCD之信号量机制一中介绍了通过信号量设置并行最大线程数,依此信号量还可以防止多线程访问公有变量时数据有误,下面的代码能说明. 1.下面是不采用信号量修改公有变量的值 1 2 3 4 5 6 7 ...

  2. C++ 虚函数 、纯虚函数、接口的实用方法和意义

    也许之前我很少写代码,更很少写面向对象的代码,即使有写多半也很容易写回到面向过程的老路上去.在写面向过程的代码的时候,根本不管什么函数重载和覆盖,想到要什么功能就变得法子的换个函数名字,心里想想:反正 ...

  3. OpenJudge_1321:棋盘问题

    题目描述 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆 ...

  4. Finding LCM (最小公倍数)

    Finding LCM Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu [Submit]   ...

  5. 安卓App提交应用商店时遇到的两个小问题

    陆陆续续做了一个半月左右的「喵呜天气」终于在今天下午成功提交到应用商店(腾讯应用宝).期间遇到两个小问题,记录如下: 1.上传安装包失败,提示「无法获取签名信息,请上传有效包(110506)」. 安装 ...

  6. 基于nginx的虚拟主机的配置

    安装pcre tar -xvf pcre-8.32.tar.gz cd pcre-8.32 ./configure make;make install 安装nginx 首先创建一个nginx用户,以n ...

  7. ZOJ2067 经典 DP

    题目:一个由'.'和'#'组成矩形,统计里面'.'组成的矩形的个数.点击打开链接 自己写挂了,懒得搞了 #include <stdio.h> #include <string.h&g ...

  8. Oracle Database 10g Express Edition系统文件损坏的解决办法

    1.检查错误代码:ora-10010 亦或是ora-10003,上网找响应的解决办法: 异常状态:登陆不上 常用的方法解决 (1)进入Oracle命令行模式 (2)Shutdown immedaite ...

  9. 浅析php curl_multi_*系列函数进行批量http请求

    何起: 一系列 数量很大 数据不热 还希望被蜘蛛大量抓取的页面,在蜘蛛抓取高峰时,响应时间会被拉得很高. 前人做了这样一个事儿:页面分3块,用3个内部接口提供,入口文件用curl_multi_*系列函 ...

  10. 一些实用的JQuery代码片段收集(筛选,搜索,样式,清除默认值,多选等)

    //each遍历文本框 清空默认值 $(".maincenterul1").find("input,textarea").each(function () { ...