zoukankan      html  css  js  c++  java
  • CF493D Vasya and Basketball (二分)

    分析:
    对于本题,因为数据,不难想到是nlogn左右的算法
    本题的数据具有单调性,在排序之后,一定是以分界线为边,一边是2分一边是3分
    我们可以暴力枚举分界线,并且根据分界线二分求得左右,之后计算最小
    我们知道,分界线的种类只需要枚举a中所有数以及b中所有数再加上0的位置和无穷大的位置就可以表述所有情况

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<cmath>
    #include<cstdio>
    #include<queue>
    #include<map>
    #include<cstring>
    #include<string>
    using namespace std;
    typedef long  long ll;
    const int N=2e5+10;
    ll n;
    int a[N];
    int b[N];
    ll m;
    ll ans1;
    ll ans2;
    ll res1;
    ll res2;
    int res;
    int main(){
        int i;
        cin>>n;
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        cin>>m;
        for(i=0;i<m;i++){
            scanf("%d",&b[i]);
        }
        sort(b,b+m);
        res1=2*n;
        res2=2*m;
        ans1=res1;
        ans2=res2;
        res=res1-res2;
        res1=3*n;
        res2=3*m;
        int tmp=res1-res2;
        if(tmp>=res){
            res=tmp;
            ans1=res1;
            ans2=res2;
        }
        for(i=0;i<n;i++){
            int sign1=upper_bound(a,a+n,a[i])-a;
            int sign2=upper_bound(b,b+m,a[i])-b;
            res1=3*n-sign1;
            res2=3*m-sign2;
            if(res1-res2>res){
                res=res1-res2;
                ans1=res1;
                ans2=res2;
            }
            else if(res1-res2==res){
                if(res1>ans1){
                res=res1-res2;
                ans1=res1;
                ans2=res2;
                }
            }
        }
        for(i=0;i<m;i++){
            int sign1=upper_bound(a,a+n,b[i])-a;
            int sign2=upper_bound(b,b+m,b[i])-b;
            res1=3*n-sign1;
            res2=3*m-sign2;
            if(res1-res2>res){
                res=res1-res2;
                ans1=res1;
                ans2=res2;
            }
            else if(res1-res2==res){
                if(res1>ans1){
                res=res1-res2;
                ans1=res1;
                ans2=res2;
                }
            }
        }
        cout<<ans1<<":"<<ans2<<endl;
        return 0;
          
    
    }
    View Code
  • 相关阅读:
    【计算机世界】467- XOR — 神奇的按位运算符
    记 · 复习知识 · 偶遇好玩的知识点
    【CSS】466- 一行 CSS 代码搞定响应式布局
    【Web技术】465- 关于前端埋点统计方案思考
    【CSS】464- 5种 CSS 浮动和清除浮动的方法
    简单易懂的 React useState() Hook 指南(长文建议收藏)
    java中的四类八种
    线程
    异常
    Aspx Ajax 调用 C#函数处理数据
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12427687.html
Copyright © 2011-2022 走看看