当前位置: 首页 > news >正文

CF 2132 E. Arithmetics Competition

E.Arithmetics Competition


原题链接

题意简述

在算术比赛中,参赛者需要用手中的纸牌算出尽可能高的总和。在 "fst_ezik "队中,瓦迪姆有 \(n\) 张数字为 \(a_i\) 的牌,科斯佳有 \(m\) 张数字为 \(b_i\) 的牌。在每一轮 \(q\) 比赛中,他们都想获胜,但这次的比赛规则与往常略有不同。
在每一轮比赛中,参赛者都会得到三个数字 \(x_i\)\(y_i\)\(z_i\) 。" fst_ezik "队必须从他们所有的牌中准确地选出 \(z_i\) 张牌,但是瓦迪姆从他的牌组中选出的牌不能超过 \(x_i\) 张,科斯佳从他的牌组中选出的牌不能超过 \(y_i\) 张。请帮助他们找出\(q\) 轮的最高和。

解题思路

两个序列中选择k个最大值,但是序列a选择数量不超过 x,序列b中选择数量不超过y,
solve1.考虑把 a 从小到大排序,把 b 从大到小排序,构造一个凸函数,但是由于区间是非严格的凸性,三分法时取前缀和区间选取范围卡到 r-l>=6
solve2:把 a 从小到大排序,把 b 从小到大排序,然后合并 a 与 b 中元素到 c 从小到大排序,观察 c 中前 k位 元素 选取的a数量是否满足 a<=x ,不满足则输出 a 中前 x 大之和 与 b 中 前 k-x 大 之和相加 , 选取的b数量是否满足 b<=y ,不满足则输出 b 中前 y 大之和 与 a 中 前 k-y 大 之和相加 ,如果都满足,直接输出合并区间中前 k 大的数即可.

AC code(三分)

//Stop learning useless algorithms, go and solve some problems, learn how to use binary search.
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
void solve(){int n,m,q;cin>>n>>m>>q;vector<ll>a(n+m+1);for(int i=1;i<=n+m;i++) cin>>a[i];sort(a.begin()+1,a.begin()+1+n);sort(a.begin()+1+n,a.end(),greater<ll>());vector<ll>pre(n+m+1);for(int i=1;i<=n+m;i++) pre[i]=pre[i-1]+a[i];auto f=[&](int mid,int k) ->ll {if(mid<k) return -INT_MAX;return pre[mid]-pre[mid-k];};while(q--){int x,y,z;cin>>x>>y>>z;int l=n-x+z,r=n+y;while(r-l>=6){int mid1=l+(r-l)/3;int mid2=r-(r-l)/3;if(f(mid1,z)<f(mid2,z)) l=mid1;else r=mid2;}ll ans=0;for(int i=l;i<=r;i++) ans=max(ans,f(i,z));cout<<ans<<endl;}}
int main(){cin.tie(0)->ios::sync_with_stdio(false);int T=1;cin>>T;while(T--) solve();return 0;
}

AC code

//Stop learning useless algorithms, go and solve some problems, learn how to use binary search.
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
void solve(){int n,m,q;cin>>n>>m>>q;vector<ll>a(n+1),b(m+1);vector<pair<int,int>>c(n+m+1);vector<ll>pre(n+m+1);for(int i=1;i<=n;i++) cin>>a[i],c[i].first=a[i],c[i].second=1;for(int i=1;i<=m;i++) cin>>b[i],c[i+n].first=b[i];sort(a.begin()+1,a.end(),greater<ll>());sort(b.begin()+1,b.end(),greater<ll>());sort(c.begin()+1,c.end(),greater< pair<ll,int> >());for(int i=1;i<=n;i++) a[i]+=a[i-1];for(int i=1;i<=m;i++) b[i]+=b[i-1];for(int i=1;i<=n+m;i++) c[i].second+=c[i-1].second;while(q--){int x,y,z;cin>>x>>y>>z;int numa=c[z].second;int numb=z-numa;    if(numa>x) cout<<a[x]+b[z-x]<<endl;else if(numb>y) cout<<a[z-y]+b[y]<<endl;else cout<<a[numa]+b[numb]<<endl;}
}
int main(){cin.tie(0)->ios::sync_with_stdio(false);int T=1;cin>>T;while(T--) solve();return 0;
}
http://www.jsqmd.com/news/20355/

相关文章:

  • 增强AI股票预测分析报告 - 2025年10月23日
  • 2025年质量好的海水淡化反渗透膜,高压反渗透膜厂家最新权威推荐榜
  • CXF WebService No operation was found with the name
  • 2025年口碑好的园林修剪机推荐TOP品牌企业
  • 2025年质量好的抽屉阻尼骑马抽,侧帮阻尼骑马抽厂家推荐及选择指南
  • HC32F472
  • 2025年比较好的超强承重天地铰链,隐藏天地铰链厂家最新推荐排行榜
  • 2025年比较好的反弹插入门厂家最新推荐榜
  • 2025年口碑好的滚筒筛土机推荐生产厂家
  • 国产“小螺纹”——HL-SMA-KHD 实测记录
  • 2025年评价高的全品类全屋五金厂家推荐及选择建议
  • 2025 年折弯机厂家最新推荐排行榜:聚焦数控 / 电液伺服 / 液压等机型,精选企业助您精准采购
  • 2025年可靠的直流温升试验机厂家推荐及选择建议
  • 2025年耐用的五谷杂粮超微粉碎机,牧草超微粉碎机推荐生产厂家
  • 2025年热门的大型阳台壁挂太阳能最新TOP排名厂家
  • 2025年专业的无锡液压缸厂家推荐及选择建议
  • 2025年耐用的木工除尘设备厂家最新推荐榜
  • AI 重构实体经济:2025 传统产业转型的实践与启示 - 指南
  • 2025年耐用的湿式除尘器,文丘里湿式除尘器厂家TOP推荐榜
  • Edge设置黑夜模式
  • C# 界面美化实战:从基础控件到现代设计
  • 2025年诚信的混凝土水沟滑模机厂家推荐及选择指南
  • 2025年专业的煤炭化验设备最新TOP排名厂家
  • 2025年知名的开门式厨房拉篮厂家推荐及采购指南
  • 2025年优质的冷弯成型机,波形板冷弯机厂家最新推荐排行榜
  • 完整教程:pdf转图片:pdf2image
  • 2025年优质的高抗干扰测力称重工业型导轨式推荐TOP品牌企业
  • 实现一个纯血鸿蒙版(HarmonyOS)的聊天Demo,并可与其它PC、手机端互通!
  • 详细介绍:使用ffmpeg8.0的whisper模块语音识别
  • 2025年知名的螺旋丝杆升降机厂家推荐及采购指南