CodeForces 493C C. Vasya and Basketball 二分

传送门:C. Vasya and Basketball

题目大意

第一只队伍有N的个人投篮,第二个人有M个人投篮,为了让第一只队伍和第二只队伍的分差尽可能大,怎么选定三分线

解题思路

对两只队伍的每个距离进行二分,判断最大分差,还有判断两只队伍都是投三分球和都是投二分球的进行判断

AC代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 2e5+500;
const int INF  = 0x3f3f3f3f;
int A[MAXN],B[MAXN],MAX = -1,MIN=-2,ans=-1;
int N,M;
int main()
{
    scanf("%d",&N);
    for(int i=1;i<=N;i++) scanf("%d",&A[i]);
    scanf("%d",&M);
    for(int i=1;i<=M;i++) scanf("%d",&B[i]);
    sort(A+1,A+N+1);sort(B+1,B+M+1);
    MAX = N*3;
    MIN = M*3;
    if(2*N-M*2>MAX-MIN){
        MAX = 2*N;
        MIN = 2*M;
    }
    for(int i=1;i<=N;i++){
        int p = upper_bound(A+1,A+N+1,A[i])-A-1;
        int q = upper_bound(B+1,B+M+1,A[i])-B-1;
        int tmp1 = p*2+(N-p)*3,tmp2=q*2+(M-q)*3;
        if(tmp1-tmp2>MAX-MIN||(tmp1-tmp2==MAX-MIN && tmp1>MAX)){
            MAX = tmp1;
            MIN = tmp2;
        }
    }
    //printf("[%d,%d]\n",MAX,MIN);
    for(int i=1;i<=N;i++){
        int p = upper_bound(A+1,A+N+1,B[i])-A-1;
        int q = upper_bound(B+1,B+M+1,B[i])-B-1;
        int tmp1 = p*2+(N-p)*3,tmp2=q*2+(M-q)*3;
        if(tmp1-tmp2>MAX-MIN||(tmp1-tmp2==MAX-MIN && tmp1>MAX)){
            MAX = tmp1;
            MIN = tmp2;
        }
    }
    printf("%d:%d\n",MAX,MIN);
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值