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

打卡第30天 - P2827(2) - 2026 - 7 - 12

1的写法有想法,但是因为时间复杂度太高所以走不通
首先,我前面的思路是使用优先队列来进行,但是优先队列的插入复杂度是\(O(log (n+m))\),总共m次操作,总复杂度为\(O(mlog(n+m))\),在\(1 \leq n \leq 10^5\)\(0 \leq m \leq 7 \times 10^6\)的情况下肯定会超时,所以我们需要再想想。
再看题目,每一次取出,将最大的劈成固定比例的两份,其他的加上q,而且\(0 \leq q \leq 200\),所以我们可以发现这样的一个现象:

  • 5, 4取出5,假设按照p=0.25来将5变成1和4,原本的4加上1变成5,整理一下是5,4,1
  • 5,4,1取出5,变成1和4,原本的4和1加上1变成5和2,整理就是5,4,2,1

发现了吗,原本的变完以后的第一个5来自原本的5的较大份,4来自原本4的较大份,2来自原本5的较小份,1来自原本4的较小份
说明了将蚯蚓处理后的两份分开存储,长度的单调递增的(可以多试几组数据检验)
简单来说:
\(a\) 为降序数组且长度为 \(n\)
\(f_1(x)\) 可以得到长度 \(x\) 分裂的第一段。
\(f_2(x)\) 可以得到长度 \(x\) 分裂出来的第二段,且满足:

\[f_1(x) \le f_2(x) < x \]

\[f_1(x) + f_2(x) = x \]

\(f_1(x)\) 展开为:

\[f_1(x) = p \cdot x \]

\(f_2(x)\) 展开为:

\[f_2(x) = x - f_1(x) = (1 - p)x \]

(全程 \(\frac{1}{2} < p < 1\)
简单来说:
已知 \(a_0 \ge a_1\),经过分裂后和加 \(q\) 后:
\(a_0\) 变成了 \(f_1(a_0) + q\)\(f_2(a_0) + q\)
\(a_1\) 变成了 \(f_1(a_1 + q)\)\(f_2(a_1 + q)\)
\(a_1 + q\) 带入原函数 \(f_1\),得:

\[p \cdot (a_1 + q) \]

展开为:

\[p \cdot a_1 + p \cdot q \]

还原为:

\[f_1(a_1) + f_1(q) \]

\(a_1 + q\) 带入原函数 \(f_2\),展开为:

\[a_1 + q - p \cdot a_1 - p \cdot q \]

整理为:

\[a_1(1 - p) + q(1 - p) \]

还原为:

\[f_2(a_1) + f_2(q) \]

因为 \(a_0 \ge a_1\),所以:

\[f_1(a_0) \ge f_1(a_1) \]

\(f_2\) 同理。
同样由定义可知:

\[f_1(q) < q \]

\[f_2(q) < q \]

所以:

\[f_1(a_0) + q > f_1(a_1) + f_1(q) \]

基于这个思想,我们将原本的所有蚯蚓长度降序排序,压入一个队列中,另外准备两个队列,用来存储劈开后的两个蚯蚓
每一次从3个队列头部中选出最大的那个,然后弹出去,计算偏移量,题目中说是其他的全部加一个q,其实等同于分裂出来的这两个减掉一个q,相对来说效果一样,只不过每一次需要真实值的时候需要计算真实值,设当前是第\(k\)秒,那么一个没有被切过的蚯蚓长度应该是\(x+kq\)(x为原本的长度),而且分裂前需要计算原蚯蚓的真实长度(注意!这个长度应该是\(x+(k-1)q\),因为现在第\(k\)秒的增加还没有发生)
还有,使用double存p然后和x相乘会产生轻微的误差,而且整个代码只有一处用到了p,所以这里将p换成u/v
但是!\(0 < u \leq 10^9\)\(0 \leq a_i \leq 10^8\),算出来直接爆int,所以我们要将其中一个变为long long来算才行

十年OI一场空,不开long long见祖宗

最后的收尾就是将原本计算真实长度的\(x+kq\)换成\(x+mq\)罢了,但是一定要还原了真实长度以后再降序排序。

AC代码

#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
vector<int> vec;
int n,m,q,u,v,t;
queue<int> qu[3]; // 0是原本的,1是px的,2是x-px的
int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin>>n>>m>>q>>u>>v>>t;for(int i=1; i<=n; i++) {int a; cin>>a;vec.push_back(a);}sort(vec.begin(), vec.end(), [](int a, int b) {return a > b;});for(auto i : vec) qu[0].push(i);int de = 0;for(int k=1; k<=m; k++) {int idx = 0;for(int i=0; i<3; i++) {if(!qu[i].empty()) {if(qu[idx].empty() || qu[i].front() > qu[idx].front()) idx = i;}}int x = qu[idx].front() + de;if(k % t == 0) cout<<x<<" ";int px = (ll)x * u / v; de += q;qu[1].push(px-de); qu[2].push(x-px-de);qu[idx].pop();}cout<<endl;vector<int> v;for(int i=0; i<3; i++) {while(!qu[i].empty()) {v.push_back(qu[i].front() + de);qu[i].pop();}}sort(v.begin(), v.end(), [](int a, int b){return a > b;});for(int i=0; i<v.size(); i++) {if((i+1) % t == 0) cout<<v[i]<<" ";}return 0;
}
http://www.jsqmd.com/news/1183874/

相关文章:

  • Windows系统文件cryptoss.dll丢失找不到问题解决
  • 2026内蒙古发电机组租赁优质企业排行参考指南 - 起跑123
  • 广告素材曝光量估算与监测工具选型:从海外到国内全域实战对比 - 短商
  • 芝柏中国官方售后服务中心|详细网点地址及客服热线权威信息通告(2026年7月更新) - 亨得利钟表维修中心
  • 线上投票防刷票怎么设置?免费稳定投票平台实测!
  • 2026 武汉权威优选正规婚恋机构|佳鸾脱单俱乐部,全城实名一对一红娘相亲(完整版 FAQ) - 星际AI
  • 基于外近似模型的电动汽车可调能力(功率/容量)聚合评估研究(Matlab代码实现)
  • 卡地亚中国官方售后服务中心|服务电话和详细网点地址权威信息通知(2026年7月最新) - 卡地亚服务中心
  • 2026年潍坊正规的蒸馏器定制厂家选型参考 - 热点品牌推荐
  • Windows系统文件cryptsvc.dll丢失找不到问题解决
  • 2026年7月最新国内特殊电缆主流供应厂商参考排行 - 起跑123
  • 2026年免费提词器软件横向测评,哪款最流畅 - 软件工具教程方法
  • 泰安专升本公品牌实用选择攻略全指南 - 热点品牌推荐
  • 基于改进 ICEEMDAN 的火电 - 蓄电池 - 飞轮混合储能联合调频协同控制策略研究(Matlab代码实现)
  • 2026年 工业设备钣金机架机柜有实力的制造商:精密工艺与结构强度的匠心之选 - 甄选服务推荐
  • JavaScript Canvas 实现生命游戏:从 0 到 1 构建 100x100 网格交互式模拟器
  • 2026拼多多防比价新玩法:告别低价内卷解锁商家盈利新路径
  • 2026年 电子五金生产厂家推荐:精密冲压与高可靠性五金件优质源头工厂甄选 - 甄选服务推荐
  • 2026年粤西本土企业短视频实力企业费用标准参考 - 热点品牌推荐
  • 2026年7月最新天津卡地亚官方售后客服服务电话及地址网点大全 - 卡地亚官方售后中心
  • 2026年7月最新杭州雷达官方售后客服电话及服务网点地址查询 - 亨得利钟表维修中心
  • 2026实地走访调研后 正规塑料粉碎机工厂推荐清单分享 - 起跑123
  • Windows系统文件cryptuiwizard.dll丢失找不到问题解决
  • 使用SingleFile插件高效保存网页为离线HTML文档
  • 直播提词不求人,免费提词器软件2026年实测分享 - 软件工具教程方法
  • 2026年7月最新长沙高性价比封窗主流品牌全维度盘点 - 起跑123
  • 2026吉林钢结构大跨度厂房搭建厂家排行汇总参考 - 起跑123
  • 百达翡丽中国官方售后服务中心|全新服务电话和维修地址权威信息声明(2026年7月更新) - 百达翡丽服务中心
  • 面向新能源容量提升的智能软开关(SOP)配电网重构模型研究(Matlab代码实现)
  • 2026年沈阳门窗工厂:专注保温隔音节能的系统门窗与阳光房厂家分析 - 甄选服务推荐