Codeforces Round 999, Div. 1 + Div. 2 部分题解

fst 掉大分了...

B. Kevin and Geometry

由于这题赛后被叉了,就放上来了。

题意

给定 n 个数,选出 4 个数组成一个等腰梯形。

题解

等腰梯形要求腰的两倍加上下底的最小值大于最大值。

对数组排序,枚举哪个数作为腰,接着选出去掉这两个腰后差最小的两个数即可,设当前选的腰为 ai,ai+1 ,考虑选择 a1i1 中的两个数,ai+2n 中的两个数,以及 ai1,ai+2 。前两个用前后缀预处理一下。

关于 ai1,ai+2 ,比如 1,2,2,3 这种的,pretest 没有这种数据,你这 pretest 是什么东西?????

参考实现

E. Kevin and And

题意

n 个数 anm 个数 bm,一次操作可以选择 in,jm,使 ai=ai&bj ,最多操作 k 次,使得最后的 ai 最小。

m10

题解

先求出对于每个 ai ,操作 k 次后能变成的最小值是多少,注意有个错误的贪心做法:第 k 次的最小值是第 k1 次的最小值再选一个数,比如 a=1111,b=[1010,0101,0011] 。因此我们需要枚举 b 的所有组合,设为 fi,k

有个结论:fi 是凸的,感性理解一下:每次多选择一个数操作时,限制总是更严格的。

于是我们像堆模拟搜索那样,选前 k 个让差最大的操作就行了,由于 fi 是凸的,我们可以把所有的 fi,kfi,k+1 丢进去,选前 k 大就行。

参考代码

G. Kevin and Teams

参考了官方题解。

真人类智慧,传奇 ioi 出题组恐怖如斯。

题意

给定 n ,求出最大的 k ,使得对于任意 n 个点组成的无向图,总存在 k 对互不相同的点 (a1,b1),(a2,b2)(ak,bk) ,使得所有的 (ai,bi) 要不都有连边要不都没有连边。

求出 k 后,你需要进行交互,交互库有一个隐藏的无向图,你可以问 n 次两个点是否有连边,并构造 k 对点出来。

交互库是自适应的。

题解

对于点 u,v,k ,若 (u,v)(v,k) 的连通性不同,那我们把 (u,v,k) 三元组拿下来,三个点中总有一对点满足 连边 或 不连边。

我们证明 k=n+13

证明上界,构造 2×n+13+[n mod 3=1] 个点的团,其余点不连任何边,达到上界。

下面构造的证明可行性:

我们维护一条链,链上相邻的点连边情况均相同,每次加入一个点时,若该点和链尾的连边情况和链相同,则将这个点加入链。否则,脱去从链尾数两个点,加上这个点构成一个三元组,注意若链长小于 2 要重新维护这条链。

最劣的情况是:最终链长小于 2 ,此时至少能脱下 k 个三元组。

若链长大于等于 2 ,则链的相邻点全部组合起来,加上脱下的三元组,也总有 k 对点满足题意。

参考代码


别的题在赶来的路上。

posted @   蒻蒻虫  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示