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

[题解]考前一些贪心技巧题

比如今年 S-T1,去年 NOIp-T1,讲真我挺害怕这种贪心的,所以记录一些偏向思维/技巧的贪心题。

受 Codeforces 的启发,尝试这样一种新的题解风格。

用这种风格,大概是为了让自己搞懂“为什么想到这样转化”,对考场思维起一点微弱的引导作用(?)。

真心希望不要再 T1 做不出来了(哭)

1. AGC048B Bracket Score

Hint 1 转化一下题意,考虑一个只有小括号的串串,你要将其中一部分小括号替换成中括号。

替换第 \(i\) 个小括号对答案的贡献是多少?

Hint 2 中括号应该怎么放才能使整个串串合法?
Hint 3 左括号还是右括号并不重要。
Hint 4 一种替换方案合法的充要条件是什么?
Sol 先令答案为 $\sum a_i$。

我们发现,一种替换方案合法,当且仅当每对中括号的下标异奇偶。

为此,将奇数和偶数位的 \(b_i-a_i\) 分别存起来,从大到小排序。

每次我们取出两个序列的最大值 \(x,y\),若 \(x+y>0\) 则累入答案,相当于我们将两个小括号换成了一对中括号。

代码实现用的是优先队列。

总时间 \(O(n\log n)\)

Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,a[N],b[N],ans;
priority_queue<int> q1,q2;
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++) cin>>a[i],ans+=a[i];for(int i=1;i<=n;i++){cin>>b[i];if(i&1) q1.push(b[i]-a[i]);else q2.push(b[i]-a[i]);}while(!q1.empty()&&!q2.empty()){int x=q1.top(),y=q2.top();if(x+y<0) break;q1.pop(),q2.pop();ans+=x+y;}cout<<ans<<"\n";return 0;
}

2. AGC018C Coins

Hint 1 考虑沿用上题的转化。先令所有人币种一样,再进行调整。
Hint 2 考虑一个人的 $2$ 种调整策略对答案的贡献分别是多少?
Hint 3 尝试用交换法来搞出一个贪心策略?
Sol 先令答案为 $\sum a_i$,即所有人都选金币。

然后,我们使用 \(y\) 个银币、\(z\) 个铜币替换掉一部分金币。

改换银币、铜币对答案的贡献是 \((d,e)=(b-a,c-a)\)

假设“\(i\)\(d\)\(j\)\(e\)”优于“\(i\)\(e\)\(j\)\(d\)”,也即 \(d_i+e_j\ge e_i+d_j\),移项得 \(d_i-e_i\ge d_j-e_j\)

\(d-e\) 从大到小排序后,一定存在一个最优解,满足选 \(d\) 的全在选 \(e\) 的左边。

考虑枚举这个分段点,并预处理出它左边选 \(y\)\(d\) 的最大贡献,以及它右边选 \(z\)\(e\) 的最大贡献。

预处理可以用堆。计算每个前缀选 \(d\) 的最大贡献,我们开一个小根堆,大小超过 \(y\) 后弹出堆顶即可。\(e\) 同理。

总时间 \(O(n\log n)\)

Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,x,y,z,ts,lmx[N],rmx[N],ans=-1e18;
struct Nd{int d,e;}s[N];
priority_queue<int,vector<int>,greater<int>> q;
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>x>>y>>z,n=x+y+z;for(int i=1,a,b,c;i<=n;i++){cin>>a>>b>>c;ts+=a,s[i]={b-a,c-a};}sort(s+1,s+1+n,[](Nd i,Nd j){return i.d-i.e>j.d-j.e;});for(int i=1;i<=n;i++){lmx[i]=lmx[i-1]+s[i].d;q.push(s[i].d);if(q.size()>y) lmx[i]-=q.top(),q.pop();}while(!q.empty()) q.pop();for(int i=n;i;i--){rmx[i]=rmx[i+1]+s[i].e;q.push(s[i].e);if(q.size()>z) rmx[i]-=q.top(),q.pop();}for(int i=y;i<=n-z;i++) ans=max(ans,lmx[i]+rmx[i+1]);cout<<ts+ans<<"\n";return 0;
}

正在找题……如果有任何推荐请在评论踢我。

http://www.jsqmd.com/news/53146/

相关文章:

  • mysql查看binlog, 追溯历史
  • 实用指南:Jenkins Pipeline 快速开始
  • 2025年下半年特氟龙喷涂、聚四氟乙烯喷涂、陶瓷喷涂、碳化钨喷涂、聚四氟乙烯管道设备厂家口碑推荐
  • 两款开源PLC软件推荐,ARMxy系列完美适配!
  • 251127
  • 2025年下半年特氟龙喷涂、聚四氟乙烯喷涂、陶瓷喷涂、碳化钨喷涂、聚四氟乙烯管道设备厂家综合评估与选购指南
  • 2025年下半年菜籽油/粮油批发/植物油/食用油批发厂家口碑前五推荐
  • 成都动力无限:深耕十五载,以专业短视频代运营赋能企业增长
  • 2025年下半年特氟龙喷涂、聚四氟乙烯喷涂、陶瓷喷涂、碳化钨喷涂、聚四氟乙烯管道设备厂家综合推荐指南
  • android studio,java 语言。新建了任务,在哪儿设置 app 的名字和 logo。
  • 3 天从 0 入门 SQL:交易所 Market Surveillance 实战速成(Wash Trading / Spoofing / Pump Dump)
  • 保姆级教程!PaddleOCR-VL 私有化部署全流程,109 种语言 SOTA 模型直接用
  • 2025年下半年拖车绳/三股绳/拖拉绳/弹力绳工厂 top 5 推荐
  • 怎样减少库存对资金的占用?企业老板最该先解决的,其实就是这三件事
  • 容器终端常用命令
  • 深入解析:批量替换文件内容麻烦?Windows小工具5步搞定,效率提升80%
  • Raney 引理小记
  • 2026年石家庄/邯郸/邢台/保定/沧州/廊坊/衡水农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活
  • 2025年下半年拖车绳/三股绳/拖拉绳/弹力绳厂家前五推荐
  • 头大的内存泄漏
  • 金蝶ERP制造业行业实施专家榜:专精特新企业如何选择行业经验丰富的服务商?
  • 清理谷歌浏览器垃圾文件 Chrome “User Data” - 教程
  • 动态规划:不同的二叉搜索树
  • 金蝶ERP服务商金标准:数据治理与流程梳理能力哪家强?——上海宝蝶排名第一
  • 2025年郑州短视频运营服务商推荐榜:河南无限动力凭技术实力领跑获客赛道
  • 2025年11月定制滑轨品牌推荐: 非标定制KVM重型座椅多节滑轨源头厂家精密工艺与市场认可度解析!
  • 【NCS随笔】NCS如何修改连接间隔
  • 2025年11月成都律师事务所最新推荐榜:成都金牌/离婚/知名/经济纠纷律师事务所与客户口碑深度解析!
  • Windows Dirty Pipe漏洞CVE-2022-22715分析与利用
  • 2025 年上海影棚出租公司最新推荐榜,聚焦技术实力与市场口碑深度解析上海汽车摄影棚出租 / 上海汽车影棚出租有灯箱 / 上海汽车影棚出租有转盘 / 上海汽车影棚出租 / 上海直播影棚出租公司推荐