• CodeForces


    题目描述:

    给出两只队伍投球距离,计算最优的三分线划分,使得:

    队伍一的得分减去队伍二的得分尽可能大,如果存在相同的解,取队伍一得分最大的解

    思路:

    将两个队伍的头球距离放在同一个坐标轴上,枚举每一个投球距离作为三分线(小于等于该距离为两分,upper_bound()返回大于该值的第一个值的位置(注意可能返回越界值)),判断最优解

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int n,m;
    int a,b;
    vector<int> tf,ts;
    void judge(vector<int> &tx){
    	for(int i=0;i<n;i++){
    		int val1 = upper_bound(tf.begin(),tf.end(),tx[i])-tf.begin();
    		val1 = val1*2 + (n-val1)*3;
    		int val2 = upper_bound(ts.begin(),ts.end(),tx[i]) - ts.begin();
    		val2 = val2*2 + (m - val2)*3;
    		if(val1 - val2 == (a - b)){
    			if(val1 >a){
    				a = val1; 
    				b = val2;
    			}
    		} 
    		else if(val1 - val2 > a-b ){
    			 a = val1;
    			 b = val2;
    		}
    	}
    	
    }
    int main() 
    {
    	cin>>n;
    	tf.resize(n);
    	for(int i=0;i<n;i++){
    		cin>>tf[i];
    	}
    	cin>>m;
    	ts.resize(m);
    	for(int i=0;i<m;i++){
    		cin>>ts[i];
    	}
    	sort(tf.begin(),tf.end());
    	sort(ts.begin(),ts.end());
    	if(n>=m) {
    		a = n*3 ;
    		b = m*3 ; 
    	}
    	else{
    		a = n*2 ; b = m*2 ;
    	}
    	judge(tf);
    	judge(ts);
    	printf("%d:%d",a,b);
    
    	return 0;
    }
    

      

  • 相关阅读:
    华为oj之字符串分割
    华为oj之字符个数统计
    华为oj之等差数列前n项和
    华为oj之质数因子
    华为oj之求int型正整数在内存中存储时1的个数
    华为oj之字符串反转
    SpringBoot--表单验证
    SpringBoot--异常统一处理
    SpringBoot--文件上传
    SpringBoot--thymeleaf
  • 原文地址:https://www.cnblogs.com/zxzmnh/p/12113005.html
Copyright © 2020-2023  润新知