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

2026江南程序设计竞赛联盟暑期多校第一场_补题题解

A 构造的芙莉莲

题目分析:

题目给了我们两个长度均为 n 的排列数组,一个是原数组 a,一个是目标数组 b,要求我们利用异或运算在不超过 3*n 次的操作下,判断是否可以将 a 数组转化为 b 数组。可以则输出Yes,并输出操作过程,反之则输出No。

解题思路:

我们知道数组a,b均为长度为n的排列,即数组元素相同,那么我们要想将a转化为b,就只通过至多n-1次的数据交换就可以实现,而恰好,题目要求的异或操作能够实现这样一个目标:

交换x、y的值,只需通过3次异或操作:
x = x ^y, y = y ^ x, x = x ^ y

这样一来,要想将每个元素归位到相应位置,只需要至多 3 * (n - 1) 次,将不会超过题目要求的 3 * n 次,即一定能构造出这样一个操作序列使得数组a 转化为数组b

代码实现:

#include<bits/stdc++.h>usingnamespacestd;inta[100010];//原数组intb[100010];//目标数组intpos[100010];//记录数组a中每个元素目前所在的位置structfunc{intans1,ans2;}s[300010];//统计答案voidsolve(){intn,ans=0;cin>>n;for(inti=1;i<=n;i++){cin>>a[i];pos[a[i]]=i;}for(inti=1;i<=n;i++)cin>>b[i];cout<<"Yes"<<endl;for(inti=1;i<=n;i++){if(a[i]!=b[i]){intpos1=pos[a[i]],pos2=pos[b[i]];s[ans+1].ans1=pos1;s[ans+1].ans2=pos2;//记录答案s[ans+2].ans1=pos2;s[ans+2].ans2=pos1;s[ans+3].ans1=pos1;s[ans+3].ans2=pos2;swap(a[pos1],a[pos2]);//置换元素pos[a[pos1]]=pos1;//更新元素位置pos[a[pos2]]=pos2;ans+=3;}}cout<<ans<<endl;for(inti=1;i<=ans;i++){cout<<s[i].ans1<<" "<<s[i].ans2<<endl;}}intmain(){solve();}

I 实验报告缝合

题目分析:

在每组的测试数据中,我们有 n 份报告, 我们要做的是每次合并至少2份至多k份报告,使之最终合并为1份报告,求出我们合并的最小代价

解题思路:

当我们看到求一串数的最小代价时,要能想到是哈夫曼树,而本题说我们一次至多可选择k份,即 k叉哈夫曼树。

那么此时我们就需要用到优先队列(priority_queue),保证我们每次取出的数是此时数组中的最小的数,且合并后的数能够归位到相应的位置。

因为我们每次选取 k 份报告,合并为 1 份报告,即每次合并净减 k-1 份报告,而我们的总数量是由 n 变为 1,即总共减少 n-1 份,要想保证我们每次尽量合并 k 份报告,那么如果 re = (n - 1) % (k - 1) 不为 0, 即当总数不能保证每次都合并k份时,我们在第一次就要合并 re + 1 份报告,使之第一次能净减 re 次,保证后续都能合并k份,否则代价将偏大

代码实现:

#include<bits/stdc++.h>#definelllonglongusingnamespacestd;voidsolve(){intn,k;cin>>n>>k;ll ans=0;priority_queue<ll,vector<ll>,greater<>>pq;for(ll i=1,x;i<=n;i++){cin>>x;pq.push(x);}intre=(n-1)%(k-1);if(re){ll tem=0;for(inti=0;i<=re;i++){ll t=pq.top();tem+=t;pq.pop();}pq.push(tem);ans+=tem;}while((ll)pq.size()>1){ll tem=0;for(ll i=1;i<=k;i++){ll t=pq.top();tem+=t;pq.pop();}pq.push(tem);ans+=tem;}cout<<ans<<endl;}intmain(){ios::sync_with_stdio(false);cin.tie(0);intT;cin>>T;while(T--){solve();}}
http://www.jsqmd.com/news/1220064/

相关文章:

  • 2026年7月亨得利官方售后服务体系发布公告:中国区60+门店地址及售后热线优化升级 - 亨得利售后服务官网
  • TAPE蛋白质嵌入评估框架:终极指南与入门教程
  • Vibe Coding 开发流程:一套可照着执行的 AI 项目开发使用说明书
  • Cursor响应式布局实战手册:从零搭建高兼容性布局系统,7天掌握动态断点控制术
  • OpCore-Simplify:5分钟搞定黑苹果EFI配置的终极指南
  • 终极免费统计分析软件:JASP桌面版完整指南
  • pytorch-cnn-finetune迁移学习实战:医学影像分类应用案例
  • 南宁闲置黄金变现,清奢黄金回收,全城上门,当场打款! - 清奢黄金上门回收
  • 南京装修公司多维度测评:经营记录、报价体系与施工工艺对比 - 装修百科
  • Kafka-UI:终极可视化解决方案,5分钟告别命令行管理困境
  • 官方线上查询功能升级指南|2026北京萧邦售后网点、客服专线一站式查询实操攻略 - 萧邦官方售后服务中心
  • Spleeter音频分离技术深度解析:从基础应用到高级定制
  • G-Helper终极指南:免费替代Armoury Crate的华硕笔记本轻量控制工具
  • Win11Debloat终极指南:如何快速清理Windows系统,恢复纯净体验
  • AI数字人嘴型不同步、口型崩坏、延迟卡顿——硬件适配清单与GPU资源调度公式全公开
  • 如何用智能助手3步搞定复杂黑苹果配置?OpCore-Simplify全解析
  • 2026商用片头片尾纯音乐AI工具推荐对比
  • ppt模板_0182_蓝闪电战
  • JS的多线程与线程池
  • RAG知识库预处理全流程拆解:网页爬取+语义分块实战教程
  • 2026智能数显压力变送器十大品牌盘点,广东犸力拿下销量榜单靠前席位 - 品牌速递
  • Java学习资料网站汇总
  • Win11Debloat终极指南:5分钟打造纯净高效的Windows系统
  • 如何用FanControl实现Windows风扇精准控制:5个技巧让电脑安静又凉爽
  • 2026-07-19:增量偶权环查询。用go语言,有一个包含 n 个节点的无向图,节点编号从 0 到 n-1,初始时图中不存在任何边。现在给定一个边序列 edges,其中每个元素都表示一条边,包含两个
  • FlakeGate:别再把 flaky test“重跑到绿”了
  • 2026年7月亨得利中国区售后服务网络更新优化 全国60+门店地址及电话汇总 - 亨得利售后服务官网
  • 怎样轻松掌握BepInEx:Unity游戏模组开发完整入门指南
  • KnpGaufretteBundle安全配置指南:文件权限、访问控制与加密存储
  • 打造专属音效:Voice-change-O-matic卷积混响与延迟效果的高级应用