把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

竞赛

题目描述
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;
}
posted @ 2021-07-05 15:49  BLUE_ROBIN  阅读(58)  评论(0)    收藏  举报
Live2D
浏览器标题切换
浏览器标题切换end