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

Codeforces Round 1049 (Div. 2) D题题解记录

大致题意:给定nnn个区间(li,ri)(l_i,r_i)(li,ri)。每次选取两个尚未被标记的区间(l1,r1)(l_1,r_1)(l1,r1)(l2,r2)(l_2,r_2)(l2,r2),使得他们均被标记,同时可以任选x∈[l1,r1],y∈[l2,r2]x\in[l_1,r_1],y\in[l_2,r_2]x[l1,r1]y[l2,r2],然后产生一个新的被标记的区间(min(x,y),max(x,y))(min(x,y),max(x,y))(min(x,y),max(x,y))。问总的被标记的区间的长度最大可以为多少。一个被标记的区间(li,ri)(l_i,r_i)(li,ri)的长度为ri−lir_i-l_irili。如果最后剩下一个未被标记的区间,则对其单独标记,并且不产生新区间。
解:
首先如果nnn是偶数,那么所有区间都会被标记,此时我们就看如何选取会使得新产生的区间长度总和尽可能长。贪心的选择,对于两个区间,新产生的区间的端点一定是原来两个区间的端点,即一个区间的左端点和另一个区间的右端点,这样尽可能的长。进而考虑:除去基本的区间长度,为了使得新产生区间尽可能长,每个区间要么贡献−li-l_ili,要么贡献rir_iri,并且最后总共一定是n2\frac{n}{2}2nrir_iri以及n2\frac{n}{2}2nlil_ili。由此自然想到:取最大的rir_iri以及最小的lil_ili。但是,如果当前rir_irilil_ili是同一个区间就不行了。换个思路:我们假设所有的区间一开始都选择贡献rir_iri,然后我们要选择一半的区间,其贡献由rir_iri变为−li-l_ili,其对总贡献增加了−(li+ri)-(l_i+r_i)(li+ri)。此值一定为负数,那么考虑其怎么才能最小,即:对li+ril_i+r_ili+ri排序,选最小的即可。

	int n;cin >> n;vector<pii > a(n + 1);vector<pii > b(n + 1);int ans = 0;for (int i = 1; i <= n; i++) {cin >> a[i].first >> a[i].second, b[i].first = a[i].first + a[i].second;ans += a[i].second - a[i].first;ans += a[i].second;b[i].second = i;}sort(b.begin() + 1, b.end());if (n % 2 == 0) {for (int i = 1; i <= n / 2; i++)ans -= b[i].first;cout << ans << endl;}

接着考虑如果nnn是奇数。前面大致思想都一样,就是最后一定会剩下一个区间是独立的。我们直接考虑枚举最后剩下的区间是哪个,然后取最值即可。

	else {vector<int> pre(n + 1);for (int i = 1; i <= n; i++)pre[i] = pre[i - 1] + b[i].first;int ori = ans;ans = ori - a[b[1].second].second - (pre[1 + n / 2] - pre[1]);for (int i = 2; i <= n; i++) {int re = min(i - 1, n / 2);int ne = n / 2 - re;if (ne <= 0) {ans = max(ans, ori - a[b[i].second].second - pre[re]);} else {int ed = i + 1 + ne - 1;ans = max(ans, ori - a[b[i].second].second - pre[re] - (pre[ed] - pre[i]));}}cout << ans << endl;}

文章转载自:

http://y2KkhS3P.yqwrj.cn
http://WaDLwbWW.yqwrj.cn
http://HPUTYW0Q.yqwrj.cn
http://bgOhK7CX.yqwrj.cn
http://6hVZq1w9.yqwrj.cn
http://BC9PoYzK.yqwrj.cn
http://HMMmxc0k.yqwrj.cn
http://ljnrdNSh.yqwrj.cn
http://RWDFBjJi.yqwrj.cn
http://2f8Rjys4.yqwrj.cn
http://GkGDy9QB.yqwrj.cn
http://b00iO1xc.yqwrj.cn
http://37T0Wph2.yqwrj.cn
http://jpLaQ7TO.yqwrj.cn
http://waKtkO3v.yqwrj.cn
http://5Mw8V1y5.yqwrj.cn
http://k6r1edZU.yqwrj.cn
http://datkHYh5.yqwrj.cn
http://18rFlSfc.yqwrj.cn
http://2lPyJfNL.yqwrj.cn
http://4raqVH1K.yqwrj.cn
http://8dni5qQV.yqwrj.cn
http://QkBCFkQv.yqwrj.cn
http://lJQ4QmqO.yqwrj.cn
http://L5ZlkIAY.yqwrj.cn
http://e4N39Klo.yqwrj.cn
http://6NqxHYLc.yqwrj.cn
http://apVgzPpB.yqwrj.cn
http://hH4kq0GG.yqwrj.cn
http://WikAEy1r.yqwrj.cn
http://www.dtcms.com/a/377744.html

相关文章:

  • 视频分类标注工具
  • 【学习】vue计算属性
  • Torch 安装
  • 如何使用 DeepSeek 帮助自己的工作?的技术文章大纲
  • Object.values(allImages).forEach(src => { }
  • git rebase 的使用场景
  • 嵌入式场景kvdb数据库的使用(二)——UnQLite数据库的移
  • 基于MQTT的实时消息推送系统设计与实现(Java后端+Vue前端)
  • 柔性数组与队列杂记
  • XCVP1902-2MSEVSVA6865 AMD 赛灵思 XilinxVersal Premium FPGA
  • iPaaS与ESB:企业集成方案的选择与实践!
  • [硬件电路-177]:如何用交流电流源(偏置电流+交变电流)模拟PD的暗电流 + 变化的光电流
  • O3.1 opencv高阶
  • 【JAVA】java的程序逻辑控制
  • 真正有效的数据指标体系应该长什么样?
  • MATLAB中的霍夫变换直线检测
  • Thread类的基本用法(上)
  • 数据建模的真相!为什么90%的团队都在做无用功
  • 30 分钟让 AI 开口查订单:React-Native + Coze 全链路语音对话落地指南
  • Nacos报错NacosException: Client not connected, current status:STARTING
  • 基于SpringBoot+Vue2开发的母婴育婴师平台
  • GNU 工具链与ARM 交叉编译工具链
  • 【大模型应用开发 6.LlamaIndex-Workflow】
  • 【蓝桥杯 2024 国 Java A】粉刷匠小蓝
  • Android 编译系统lunch配置总结
  • 2024-2025-2Linux课堂笔记及作业(不完整版)
  • ELF文件的组成格式的详细介绍
  • vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)
  • Java基础 9.10
  • 绿色算力技术栈:AI集群功耗建模与动态调频系统