一起来做题~欢乐赛1

Posted CCSU_Cola

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起来做题~欢乐赛1相关的知识,希望对你有一定的参考价值。

A 学 群 代 主 变 A 能 一

题意:找到一个C使得有尽可能多个a[i]满足 1≤j≤m ∣c−a[i]∣<∣c−b[j]∣,输出最多的ai个数。

思路:既然需要使得ai到C点距离小于bj到C点距离,那么我们只需要对b数组进行排序,查询在每个b[i]和b[i-1]中有多少个a[i],取最大值即为答案,因为只有在两个数之间找点才可满足式子。(有特例即为0到b[1]之间和b[m]到最大值之间可以取a[i]。)

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int a[100010],b[100010];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=1;i<=m;i++){
            scanf("%d",&b[i]);
        }
        sort(a+1,a+1+n);
        sort(b+1,b+1+m);
        b[m+1]=1e9+7;//最大值设为1e9+7,最小值b[0]为0
        int ans=0;
        for(int i=1;i<=m+1;i++){
            int l=b[i-1];
            int r=b[i];
            int cnt=lower_bound(a+1,a+1+n,r)-lower_bound(a+1,a+1+n,l+1);
            ans=max(cnt,ans);
        }
        if(ans==0){
            printf("Impossible\\n");
        }
        else printf("%d\\n",ans);
    }
}

以上是关于一起来做题~欢乐赛1的主要内容,如果未能解决你的问题,请参考以下文章

一起来做题~欢乐赛1

牛客 | 一起来做题~欢乐赛2 (AK 题解)

Comet OJ - 2019 六一欢乐赛

综合-某假期欢乐赛 (Apri, 2018)

SSL新年欢乐赛暨BPM退役赛

欢乐结训赛题解