首页 > 其他分享 >20241006 CF977

20241006 CF977

时间:2024-11-08 15:21:32浏览次数:1  
标签:20241006 cnt 每个 位置 CF977 序列 服务器 题意

20241006 CF977

A. Meaning Mean

题意:给定一个序列,每次选两个数变成平均值,使最后结果最大。

感性理解,一个数被平均次数越多,最终贡献减小的越多(不考虑取整,被平均了 \(cnt\) 次,就乘上 \(2^{-cnt}\))。那么肯定让小数平均多次,于是排序后按顺序做就是最优解。

B. Maximize Mex

题意:给定一个序列和一个正整数 \(x\),可以进行任意次操作,每次将一个数加上 \(x\),是最终序列的 mex 值最大。

开两个桶。第一个记原序列中的数。注意到答案不超过 \(n\),那么从小到大枚举每个值,如果有数但只有一个就跳过,如果有多个,设值为 \(i\),数量为 \(cnt\),那么就在第二个桶的 \(i\bmod x\) 位置加上 \(cnt-1\)。剩下的就是没有数的情况,这时只能从小数加上若干个 \(x\) 得到,显然这两个数模 \(x\) 同余,所以看一下第二个桶 \(i\bmod x\) 的位置上有没有值就行了,时间复杂度 \(O(n)\)。

C. Adjust The Presentation

题意:给定两个序列 \(a_n,b_m\),对于 \(i\in[1,m]\) 依次执行:若当前 \(b_i\) 在 \(a\) 的开头,则可以将其移动到 \(a\) 中的任意位置,否则这种操作方案不合法。有 \(q\) 次询问,每次修改 \(b\) 中的一个数,要求输出是否存在合法操作方案。

Easy Version \(q=0\)。

这时只要判断初始的 \(b\) 是否合法。注意到,由于每次移动可以随便动,那么当某个 \(a_i\) 在 \(b\) 中当前位置之前已经出现过,就能保证之后的所有 \(b_j=a_i\) 都能合法操作。扫一遍判断就行了。

Hard Version

进一步,我们把 \(b\) 中出现多次的数只保留第一个,那么这种情况满足条件当且仅当这时的 \(b\) 为 \(a\) 的一个前缀。我们将 \(a\) 中的数按位置映射到 \([1,n]\),开一个 set<pair<int, int> > S,每个 pair 表示一个值和它第一次出现的位置(以位置为第一关键字),那么就能将条件转化为:\(S\) 中的值为 \(1,2,3,...S.size()\)。进一步想,这就相当于第一个数为 \(1\),并且邻项值的差为 \(1\) 的数对有 \(S.size()-1\) 个。那么将每次修改看作一次删除和一次添加,再开 \(n\) 个 set 维护每个数出现的位置,这样就能 \(O(\log n)\) 更新所有信息,时间复杂度 \(O((m+q)\log n)\)。

E. Digital Village

题意:给定一张无向图和若干个特殊点。定义一条路径的权值为路径上边权的最大值,两个点间的距离为连接这两点的路径权值的最小值。对于每个 \(k\in[1,n]\),你需要选定 \(k\) 个点建立服务器,接着对于每个特殊点,选择一个服务器,代价为这两点之间的距离,要求输出最小代价和。

Easy Version \(n,m\leq 400,\sum n^3,\sum m^3\leq 10^8\)

这个数据范围明显是 \(O(n^3)\) 的做法。使用 Floyd 预处理出每个点对的距离。进行一些猜想:对于每个 \(k\) 的答案,一定是在 \(k-1\) 的基础上在多建一个服务器。证明不知道。那么对于每个 \(k\),枚举新建立的服务器,再 \(O(n)\) 计算代价,取一个最优的即可。计算代价时,记录一个 \(mn_i\) 表示 \(i\) 到已经建立的服务器的距离最小值就行了。

标签:20241006,cnt,每个,位置,CF977,序列,服务器,题意
From: https://www.cnblogs.com/luyuyang/p/18535168

相关文章

  • [20241006]跟踪library cache lock library cache pin使用gdb(补充测试3).txt
    [20241006]跟踪librarycachelocklibrarycachepin使用gdb(补充测试3).txt--//补充测试产生光标已经缓存的情况下,生成新子光标的调用librarycachelocklibrarycachepin的情况。1.环境:SCOTT@book01p>@ver2==============================PORT_STRING          ......
  • 20241006
    BacktoSchool'24P1-Kicking按照题意模拟即可#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+5;intn,m,k;charc;vector<int>sum[2][N];vector<int>a[N];signedmain(){cin>>......
  • GESP等级考试 20241006_121124
    官网CCF-GESP编程能力等级认证https://gesp.ccf.org.cn/考钢图形化1579692243025952.pdfhttps://gesp.ccf.org.cn/101/attach/1579692243025952.pdf考钢C++1579675000242208.pdfhttps://gesp.ccf.org.cn/101/attach/1579675000242208.pdf考级相关真题解析-CCF-GESP编程......
  • 20241006每日一题洛谷P1031
    对题目第一印象:贪心吧,或者纯模拟第一次贪心,由于左右端堆只能想内一堆移动,遂放弃第一次模拟,开多个数组,(可能还要用递归?),遂放弃于是求助如来佛祖:从逻辑上可以看出,第一堆缺或者多的牌只能移动到第二堆上当第一堆达到期望值时,第一堆便不能再做操作,于是,可以将第二堆作为第一堆来处理......