HDOJ 1052 Tian Ji -- The Horse Racing

2023-11-03

Tian Ji -- The Horse Racing

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 26223    Accepted Submission(s): 7726


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
 

Source
 


题目是田忌赛马。大意是田忌赢一场得200,输一场输200,平局不变。问田忌最多能得多少钱。

本来我是想得很简单的= =,就是大于算赢,小于往下滚,等于平局。结果交上去之后发现根本不是那么回事!比我想象的要麻烦多了!(摔讲道理这么一比田忌好聪明

题解:

把田忌最快的和齐威王最快的比:

如果大于,钱+200

如果小于,把田忌最慢的马和齐威王最快的马比(并且钱 -200)

(重点)如果等于(重点):

拿田忌最慢的马和齐威王最慢的马比:

如果大于,钱 +200

如果小于,等于,把田忌最慢的马和齐威王最快的马比(并且钱 -200)


关于直接对比的反例(转):

1、如果选择全部打平,那么对于田忌 1 2 3 4,国王 1 2 3 4 ,这组数据,田忌什么黄金也得不到。但是如果选择 1->4, 4->3, 3->2, 2->1田忌可以得到400两黄金。 (大雄想的)

2、如果选择用最慢的马输掉比赛的话,对于田忌    3 4,国王 1    4 ,这组数据,田忌一胜一负,什么黄金也得不到,但是如果田忌选择 3->1 , 4->4 ,一胜一平,田忌可以得到200两黄金。


#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int a[1111],b[1111];
bool cmp(int x,int y)
{
	return x>y;
}
int main()
{
	int i,n;
	int ai,aj,bi,bj;
	while(scanf("%d",&n),n)
	{
		for(i=0;i<n;i++)
			scanf("%d",&a[i]);
		for(i=0;i<n;i++)
			scanf("%d",&b[i]);
		sort(a,a+n,cmp);
		sort(b,b+n,cmp);
		int ans=0;
		ai=bi=0;aj=bj=n-1;
		for(i=0;i<n;i++)
		{
			if(a[ai]>b[bi])
			{
				ans++;
				ai++;bi++;
			}
			else if(a[ai]==b[bi])
			{
				if(a[aj]>b[bj])
				{
					ans++;
					aj--;bj--;
				}
				else if(a[aj]<b[bj])
				{
					ans--;aj--;bi++;
				}
				else
				{
					if(a[aj]<b[bi])
					{
						ans--;
						aj--;bi++;
					}
				}
			}
			else
			{
				ans--;
				aj--;bi++;
			}
		}
		printf("%d\n",ans*200);
	}
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDOJ 1052 Tian Ji -- The Horse Racing 的相关文章

  • Best Binary String

    Best Binary String 题意 给一个包含0 1 的字符串 可以换成0或1 要求换完之后使得成本最小 二进制字符串的成本定义为按非降序对字符串进行排序所需的 反转字符串的任意连续子字符串 形式的最小操作数 思路 因为每次操作是反
  • POJ--2709:Painter (贪心)

    1 题目源地址 http poj org problem id 2709 2 解题思路 每个颜料盒可能有3 12种颜色 其中每种颜色50ml 任意三种颜色 假设每种颜色Xml 可以混合出Xml的灰色 现在给出所需颜色的种数N 给出N个值分别
  • P1016 旅行家的预算【模拟+贪心】【详解】

    题目链接 思路 这道题是一道很明显的模拟题 但这道题也需要自己的理解 我自己写了些样例 然后找到了其中的模拟 我们假设从一个点出发 对于它的下一个点我们有很多选择 期间定义一个len用以记录满油 单次最远 到达距离 我们造访这条路上的所有点
  • 【二分+贪心】用 N 根绳子裁剪出 M 根等长绳子

    有 N 根绳子 第 i 根绳子的长度为 l i 现在需要 M 根等长的绳子 你可以对这 N 根绳子进行任意裁剪 不能拼接 请你计算出这 M 根绳子最长的长度 输入描述 第一行包括两个整数 N M 含义如题所述 1 lt N M lt 100
  • hdoj 1052 Tian Ji -- The Horse Racing 贪心算法

    这道题就是解决选择策略问题 思路一 先将田忌跟齐王的马的速度数组进行一次冒泡排序 1 如果田忌最慢的马比齐王最慢的马快 则比慢马 2 如果田忌最慢的马比齐王最慢的马慢 则用田最慢的马跟齐最快的马比 消耗齐的快马这是贪心的第一步 3 如果田忌
  • Petya and Exam【Codeforces 1282 C】【贪心】

    Codeforces Round 610 Div 2 C 有N道题目 题目有简单与困难之分 简单的题目花费A分钟 困难的题目花费B分钟 那么考试时间一共有T的情况下 我们是可以提前交卷的 但是有些时间限制 就是譬如说你现在第x分钟交卷 但是
  • [NOI2010]超级钢琴【RMQ+贪心+堆】

    题目链接 超级棒的一道题 解这道题 需要分一下几步来看 取的是连续段 我们可以对每个可能起点去知道它的最大可能解 起点begin 最大可行解一定是begin L 1 begin R 1中的一个 如果每次都是取最大的话 那么下一个同起点的一定
  • HDOJ 1052 Tian Ji -- The Horse Racing

    Tian Ji The Horse Racing Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 2
  • River Jumping【贪心+模拟】

    题目链接 我们可以贪心的从前往后 每次选最接近的且满足条件的这样的贪心 然后从后往前的时候 就是直接用倒着一个个判断是否合法即可 include
  • AcWing 104. 货仓选址

    题目 在一条数轴上有 N 家商店 它们的坐标分别为 A1 AN 现在需要在数轴上建立一家货仓 每天清晨 从货仓到每家商店都要运送一车商品 为了提高效率 求把货仓建在何处 可以使得货仓到每家商店的距离之和最小 输入格式 第一行输入整数N 第二
  • Bracket Coloring

    Bracket Coloring 题意 给出一个括号序列 定义漂亮序列为匹配括号序列或者反转之后是匹配括号序列的序列 现在要求染色 使得相同颜色的括号组成漂亮序列 问最少需要多少种颜色即每个括号染的颜色 思路 这里可以用栈来匹配括号序列 因
  • 璀璨光滑【牛客】【题意解析+BFS+贪心】

    题目链接 中文题意 表面平静 实则暗藏玄机 而打开本题的突破口 也确确实实就在于题目的描述 也就是说 这张图的边的数目是确定的 并且这是一张连通图 而且图上的个点每个点连接出去的边的数目都是条 因为每个数都刚好只与个数在二进制位上差1 那么
  • 多元Huffman编码问题

    题目链接 题意 最多可以让k堆合并 每一次合并的花费为河合并堆的数量 问最多和最少的花费 题解 最少的花费一定是每次合并的堆数尽可能多 这样我们就会减少前面已经合并的堆的重复计算 所以 每次合并k堆时最少 每次合并2堆时最大 另外 最少的时
  • HDOJ1052

    先用最快马比 不行再用最慢马比 都不行 就送最慢马给忘得最快马 include
  • BZOJ4345 [POI2016]Korale

    在病房里日题真是一种独特的体验 首先考虑求第一问 我们先把所有元素排序 我们用优先队列维护选数的集合 对每个集合维护集合里的元素的和v和最后一个元素 即最大的元素 lst 初始的时候我们把只包含最小元素的集合推入队列 那么我们取出一个队头元
  • 洛谷P1182-数列分段(详解)

    题目 给定一个长度为n的数列A 要求将它分为m段 要求每段连续 且每段和的最大值最小 N lt 10e5 m lt n Ai之和不超过10e9 这题一看就知道我不会 所以很老实的去看了看题解 题解也真是避重就轻 重要的地方就说 这个要自己思
  • 货仓选址(贪心)

    我之前在多篇博客中提到货仓选址 却发现从未仔细介绍过货舱选址 今天就来好好说一下货舱选址这个问题 就以这个图来说 我们假设Ap 1 gt x gt Ap 那么距离之和也就是 x A1 x A2 x Ap A p 1 x A p 2 x An
  • AcWing 1247. 后缀表达式

    老师的讲课网址 https www acwing com video 736 第二个图就已经告诉我们只要有一个减号 我们就可以组成至少含一个减号的所有组合 比如说一个减号三个加号我们可以组合成 1 2 3 4 所以代码如下 include
  • BZOJ3425 Poi2013 Polarization

    最小值一定是n 1 每条边贡献一个答案 显然 首先我们要证明这道题的一个性质 最优解一定具有如下形式 以树的某一个重心 可以是任意一个 为根 根的每一个子树里的所有边要么都指向根 要么都指向叶子 引理 首先对于一棵树 我们把所有边的朝向反转
  • 编程之美2015初赛第二场AB

    题目1 扑克牌 时间限制 2000ms 单点时限 1000ms 内存限制 256MB 描述 一副不含王的扑克牌由52张牌组成 由红桃 黑桃 梅花 方块4组牌组成 每组13张不同的面值 现在给定52张牌中的若干张 请计算将它们排成一列 相邻的

随机推荐

  • 云计算虚拟化:k8s二进制Master主备集群部署

    一 前言 无论从成本还是效率上考虑 k8s都极占优势 基本代表了未来趋势 官网推荐kubeadm配置 虽然方便 但掩盖了许多细节问题 k8s虽然咋看仅仅是个容器编排工具 但涉及的相关知识面非常广泛 如果说大数据的相关知识你需要花N天 K8S
  • do{...} while(0) 用意

    linux内核和其他一些开源的代码中 经常会遇到这样的代码 do while 0 这样的代码一看就不是一个循环 do while表面上在这里一点意义都没有 那么为什么要这么用呢 实际上 do while 0 的作用远大于美化你的代码 查了些
  • 人工智能革命:从ANI到AGI的道路

    从ANI到AGI的道路为什么这么难 没有什么比学习创造一台像人类一样聪明的电脑这种难以置信的创造更能让人欣赏人类的智慧了 建造摩天大楼 将人类置于太空中 弄清楚大爆炸如何发生的细节 这些都比了解我们自己的大脑或如何制造像它一样酷的东西要容易
  • docker harbor的安装使用以及镜像上传和拉取

    目录 harbor harbor安装 harbor上传和拉取镜像 上传 1 登录Harbor 2 打标签 3 上传镜像 拉取 1 登录Harbor 2 拉取镜像 harbor harbor是一个开源的容器镜像仓库 可用于存储和分发docke
  • 电脑怎么加快网页打开速度?加快网速。

    电脑怎么加快网页打开速度 加快网速 更换合适的dns可以直接加快网页打开速度 1 使用软件更换dns 下载地址 2 手动输入dns 1 win R键 输入 ncpa cpl 2 依次点击连接的网络 属性 Internet协议版本 TCP I
  • 【每日一题】排序子序列(贪心)

    题目来源 牛客网 链接 排序子序列 题目描述 牛牛定义排序子序列为一个数组中一段连续的子序列 并且这段子序列是非递增或者非递减排序的 牛牛有一个长度为n的整数数组A 他现在有一个任务是把数组A分为若干段排序子序列 牛牛想知道他最少可以把这个
  • PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.3 用天平找小球

    import java util Scanner public class Main public static void main String args Scanner sc new Scanner System in
  • 【总线】I2C 通信协议

    目录 I2C 总线协议概述 参数总结 I2C 的工作原理 寻址 读 写位 数据帧 I2C数据传输的步骤 具有多个从机的单个主机 具有多个从机的多个主机 I2C的优缺点 优点 缺点 文章参考 I2C 总线协议概述 I2C 总线广泛应用在 OL
  • 在B站如何不动一根手指,就可以养成6级大佬?大四学生发明养号神器,看完你也会...

    杨净 发自 凹非寺 量子位 报道 公众号 QbitAI 如何像拥有一个小助手一样 每天帮你签到打卡 或许 现在利用GitHub Action定时任务就可以做到 而这个小助手 混迹b站 可以每天按时按点签到打卡 看视频投币 定期充电 每天任务
  • leetcode 1024. 视频拼接

    你将会获得一系列视频片段 这些片段来自于一项持续时长为 T 秒的体育赛事 这些片段可能有所重叠 也可能长度不一 视频片段 clips i 都用区间进行表示 开始于 clips i 0 并于 clips i 1 结束 我们甚至可以对这些片段自
  • Prometheus+grafana

    Prometheus grafana 文章目录 Prometheus grafana 安装部署 常用指标监控 进程监控 docker容器的监控 安装部署 使用docker的方式部署 1 创建项目目录 root 129 mkdir home
  • timedate如何查看当前时间并去除毫秒

    import datetime dt datetime datetime strptime str datetime datetime now replace microsecond 0 Y m d H M S datetime datet
  • 一个批量数据导入的实现方案

    数据导入作为系统常用的功能 几乎所有的系统都应该支持 主要用于系统初期 大批量初始化数据 或者需要输入的数据行比较多的情况 导入在建项目的交付清单 通常成百上千项 数据导入的一般过程是 用户按照模板格式Excel文件 然后程序读取这个文件
  • Ubuntu部署基于Fabric的虚拟区块链服务

    关于Hyperledger Fabric的部署适合在Ubuntu或其它Linux上进行 本例在Ubuntu16 04LTS上操作 如果是Windows MacOS系统 建议安装Virtual Box 在虚拟机上部署区块链环境 准备 1 源需
  • js宏任务和微任务有哪些?执行顺序是怎样的?

    宿主 浏览器 发起的任务我们可以称之为宏观任务 macrotask 引擎 js 自己也可以发起任务 这个任务就叫做微观任务 microtask 一 js宏任务和微任务分别有哪些 1 js宏任务有
  • java.sql.SQLException: There is no DataSource named ‘null‘

    报错信息 当配置dataSource后 即使配置文件中已经指定了JobStoreTX 实际还是使用LocalDataSourceJobStore 2023 07 10 11 15 51 636 WARN main org quartz im
  • Smali文件详解

    往期推荐 Java层逆向 Dalvik指令集 Java层逆向分析 Dalvik字节码 修改资源去广告 修改包名实现分身 篡改Apk名称 图标 Smali是Dalvik VM内部执行的核心代码 是Dalvik自己的语法规范 在反编译出的代码中
  • PyCharm 中选中一个变量/函数后,所有用到这个变量/函数的地方高亮显示,改配色方案

    由于 PyCharm 原来的配色方案里面 选中一个变量 函数后 所有用到这个变量 函数的地方高亮显示得实在太不明显了 有的时候阅读别人的代码 找得眼睛都要瞎了 所以要改成高亮 找了好久才找到 所以在博客里记录一下 希望对大家有帮助 当然也是
  • windows 获取已插入U盘

    static int GetUdisk vector
  • HDOJ 1052 Tian Ji -- The Horse Racing

    Tian Ji The Horse Racing Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 2