竞赛
题目描述
F妹妹参加了一次竞赛,要求在多个方面展现自己的特长,共有t轮,每轮主办方给出n个标准(A1An),F妹妹也同样有n项才能(B1Bn),她可以选择一项与一个标准比较,高的话自己加一分,低则减一分,一样不加分,F妹妹想每轮都能获得最高的加分,请你来帮帮她。
输入
第一行一个t,表示有t组数据,之后每组数据第一行一个n,接下来2行每行n个数,分别表示A1An和B1Bn。
输出
每组数据输出一行,表示最高的得分。
样例输入 Copy
3
3
95 87 74
92 83 71
2
20 20
20 20
2
20 19
22 18
样例输出 Copy
1
0
0
提示
1<=t<=10,1<=n<=10000,标准均在Integer范围内。
田忌赛马式的题目。核心是多赢少输。则我采用的策略
1.如果我当前最好才能能超过当前最好标准,就用最好标准检验最好才能,其好处是既赢了,同时消耗对面的最好标准为我下一个最好才能获胜创造条件
2.如果我当前最差才能能超过当前最差标准,就用最差标准检验最差才能,其好处是既赢了,同时将我方最差才能的作用最大化。
3.当然如果两个都无法实现,就以下驷拼上驷的方法,发挥我方最差才能的最大作用,消耗对面的最好标准,为最好才能得分创造条件。
P.S.:还有一个需要处理的地方就是同一层循环里1,2不能同时实行,容易使最后的指针越界,需要处理一下。
上代码
include "bits/stdc++.h"
using namespace std;
int a[10010],b[10010];
int main()
{
int t;scanf("%d",&t);
while(t--){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++)scanf("%d",&b[i]);
sort(a+1,a+n+1);sort(b+1,b+n+1);
int pa=n,pb=n,ppa=1,ppb=1;
int score=0;
while(ppb<=pb){
if(a[ppa]<b[ppb]){ppa++;ppb++;score++;}
else if(a[pa]<b[pb]){pa--;pb--;score++;}
else{
// printf("%d %d\n",b[ppb],a[pa]);
if(b[ppb]<a[pa])score--;
ppb++;pa--;
}
}
printf("%d\n",score);
}
return 0;
}
樱花满地集于我心,楪舞纷飞祈愿相随
浙公网安备 33010602011771号