题目描述:
给出两只队伍投球距离,计算最优的三分线划分,使得:
队伍一的得分减去队伍二的得分尽可能大,如果存在相同的解,取队伍一得分最大的解
思路:
将两个队伍的头球距离放在同一个坐标轴上,枚举每一个投球距离作为三分线(小于等于该距离为两分,upper_bound()返回大于该值的第一个值的位置(注意可能返回越界值)),判断最优解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #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; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 本地部署 DeepSeek:小白也能轻松搞定!
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)