首页 / 资讯中心 / 文章详情

打卡信奥刷题(3654)用C++实现信奥题 P12085 [蓝桥杯 2023 省 B] 整数删除

打卡信奥刷题(3654)用C++实现信奥题 P12085 [蓝桥杯 2023 省 B] 整数删除 ★ FEATURED ARTICLE
P12085 [蓝桥杯 2023 省 B] 整数删除题目描述给定一个长度为NNN的整数数列A1,A2,…,ANA_{1},A_{2},\ldots,A_{N}A1​,A2​,…,AN​。你要重复以下操作KKK次每次选择数列中最小的整数如果最小值不止一个选择最靠前的将其删除。并把与它相邻的整数加上被删除的数值。输出KKK次操作后的序列。输入格式第一行包含两个整数NNN和KKK。第二行包含NNN个整数A1,A2,A3,…,ANA_{1},A_{2},A_{3},\ldots,A_{N}A1​,A2​,A3​,…,AN​。输出格式输出N−KN-KN−K个整数中间用一个空格隔开代表KKK次操作后的序列。输入输出样例 #1输入 #15 3 1 4 2 8 7输出 #117 7说明/提示【样例说明】数列变化如下中括号里的数是当此操作中被选择的数[1] 4 2 8 7 5 [2] 8 7 [7] 10 7 17 7【评测用例规模与约定】对于20%20 \%20%的数据1≤KN≤1041 \leq KN \leq 10^41≤KN≤104。对于100%100 \%100%的数据1≤KN≤5×1051 \leq KN \leq 5 \times 10^{5}1≤KN≤5×1050≤Ai≤1080 \leq A_{i} \leq 10^{8}0≤Ai​≤108。蓝桥杯 2023 省赛 B 组 H 题。C实现#includebits/stdc.husingnamespacestd;usinglllonglong;constintN5e510;structnode{ll val;//值intid;//下标}a[N];priority_queuenodeq;intl[N],r[N],n,m;intvis[N];//表示某个节点是否被删掉booloperator(node other,node top){if(other.valtop.val)returntop.idother.id;returntop.valother.val;}intmain(){cinnm;for(inti1;in;i){cina[i].val;a[i].idi;q.push(a[i]);}r[0]1,l[n1]n;for(inti1;in;i){//双向链表初始化l[i]i-1,r[i]i1;}while(m--){// 根据下标找到的val和队列的val不一致 或已经被删除过了while(a[q.top().id].val!q.top().val||vis[q.top().id]){q.pop();}autopq.top().id;//这个一定是最新的q.pop();intleftl[p],rightr[p];a[left].vala[p].val,a[right].vala[p].val;//左右加和vis[p]1;r[left]right,l[right]left;//链表的更新if(left1)q.push(a[left]);//不是虚拟节点if(rightn)q.push(a[right]);//不是虚拟节点}intpr[0];while(p!n1){couta[p].val ;pr[p];}}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
阅读完成 · 觉得有帮助?
咨询建站