中国古代的军师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;
}