题目描述:
给出两只队伍投球距离,计算最优的三分线划分,使得:
队伍一的得分减去队伍二的得分尽可能大,如果存在相同的解,取队伍一得分最大的解
思路:
将两个队伍的头球距离放在同一个坐标轴上,枚举每一个投球距离作为三分线(小于等于该距离为两分,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;
}
浙公网安备 33010602011771号