中国古代的军师yyds!!!
下面是题目复述:
赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为 “战国时期”。在魏国作官的孙膑,因为受到同僚庞涓的迫//害,被齐国使臣救出后,到达齐国国都。
赛马是当时最受齐国贵族欢迎的娱乐项目。上至国王,下到大臣,常常以赛马取乐,并以重金赌输赢。田忌多次与国王及其他大臣赌输赢,屡赌屡输。一天他赛马又输了,回家后闷闷不乐。孙膑安慰他说:“下次有机会带我到马场看看,也许我能帮你。”
孙膑仔细观察后发现,田忌的马和其他人的马相差并不远,只是策略运用不当,以致失败。
比赛前田忌按照孙膑的主意,用上等马鞍将下等马装饰起来,冒充上等马,与齐王的上等马比赛。第二场比赛,还是按照孙膑的安排,田忌用自己的上等马与国王的中等马比赛,在一片喝彩中,只见田忌的马竟然冲到齐王的马前面,赢了第二场。关键的第三场,田忌的中等马和国王的下等马比赛,田忌的马又一次冲到国王的马前面,结果二比一,田忌赢了国王。
不过多久,国王又找到田忌赛马,这次国王和田忌都准备了 n 匹马,每匹马都有恒定的速度,所以速度大的马一定比速度小的马先到终点(没有意外!!)。每场比赛国王会先出一匹没有出战过的马,然后田忌再选择一匹没有出战过的马进行对战。这次田忌找你帮忙,你最多能帮田忌赢得几场比赛(平局不算赢)。
输入格式
输入数据包含三行。
第一行输入 n(1≤N≤1000),表示马的数量。
第二行有 n 个整数,即田忌的 n 匹马的速度。
第三行有 n 个整数,即国王的 n 匹马的速度。
马的速度大于 0 小于等于 1000。
输出格式
输出通过你的精心安排,最多能赢得多少场比赛。
Sample Input
10
9 2 6 2 8 2 4 9 6 1
8 2 2 1 8 10 9 3 1 10
Sample Output
7
分析过程:
孙膑的方法无疑问是把没有利用价值的差马(?)去冲掉自己无法胜利的好马。我们也可以借用他的智慧模拟一下。
先把自己的马和对方的马进行排序,然后先将自己的差马和好马分别和对方进行比较,在比较之后如果可以比过就胜利+1,不然就让差马把对方的好马给消耗掉。循环n次全部跑完即可。
下面是AC代码:
#include <iostream>
#include <cstdio>
#include<algorithm>
using namespace std;
const int N=1100;
int a[N],b[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
scanf("%d",&b[i]);
sort(a,a+n);
sort(b,b+n);
int win=0;
int la=0,lb=0,ra=n-1,rb=n-1;
for(int i=1;i<=n;i++)
{
if(a[ra]>b[rb])
{
ra--;
rb--;
win++;
continue;
}
else if(a[la]>b[lb])
{
la++;
lb++;
win++;
continue;
}
else
{
la++;
rb--;
continue;
}
}
printf("%d\n",win);
return 0;
}