今天我们讲的题目有那么亿点点特别:
擂台PK(c)
问题描述:
有一天,Symbol为了与Tango一较高下,于是派出了自己的学生们与Tango 的弟子们进行了比赛。双方一共会进行n轮比赛,每轮比赛双方都会派出一个人在擂台上进行激烈的PK。现在,Tango请来了你来做他的参谋:假如已经知道双方队员的战斗力数值,问如何安排Tango队队员的出场顺序才能取得最多的胜利。
(注:由于裁判已被Symbol收买,若战斗力相同,则Symbol队的队员胜利)
输入格式:
每组数据有3行。
第1行,只有一个数字n,代表双方进行的比赛轮数
第2行,有n个整数,代表Tango队n个人的战斗能力
第3行,有n个整数,代表Symbol队n个人的战斗能力
输出格式:
只有一个数字,为Tango队最多能赢的轮数
输入样例:
3
92 83 71
95 87 74
输出样例:
2
样例解释:
先分别用Tango队中92、83战斗力的队员的把Symbol队队中87、74战斗力的队员轰杀至渣,然后热泪盈眶地送71战斗力的队员去送死……
数据范围:
对于30%的数据,N<=10
对于60%的数据,N<=5,000
对于80%的数据,N<=50,000
对于100%的数据,N<=1000,000
对于所有队员来说,很不幸地由于他们不是超级赛亚人,所以战斗力都是不会超过10000的正整数……
那么这题究竟该怎么做呢?
首先,将两队成员的战斗排序;
其次,对于每一个去送死的队员来说,我们要发挥出他最大的价值,那么我们就把他跟他战力比低且在其中最大的那一个PK,要是没有战力比他小的,那么就去送死;
最后提醒一下,送死也是有技巧的:
我们要把那个最牛逼的超级赛亚人给整死,如果不去送死,那么…(你懂的)
轰炸至渣!
#include<bits/stdc++.h>
using namespace std;
bool cmp(long long x,long long y)
{
return x>y;
}
long long n,a[1000005],b[1000005],l,r,sum;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
sort(a+1,a+1+n,cmp);
sort(b+1,b+1+n,cmp);
l=1;
r=1;
for(;;)
{
if(a[l]>b[r])
{
sum++;
l++;
r++;
}
if(a[l]<=b[r])r++;
if(l>n||r>n)break;
}
cout<<sum;
return 0;
}
下期预告: