首页 > 其他分享 >Codeforces Round 921 (Div. 1) 题解

Codeforces Round 921 (Div. 1) 题解

时间:2024-02-06 14:11:52浏览次数:24  
标签:10 le 题解 sum sqrt 921 Div 关键点 折痕

Hello Ad-Hoc Forces!

A

字符集为前 \(k\) 个小写字母,给定长度为 \(m\) 的字符串,求所有的长度为 \(n\) 的字符串是否是这个字符串的子串。(此处字串不连续)
如果不是需要给出反例。
\(1\le n,k\le 26\),\(1\le m\le 1000\)。
\(\sum n,\sum m\le 10^6\)

sol.

D1A 就是神秘贪心,汗流浃背了吧。

如果是连续字串直接暴力枚举所有的字符串即可!
但是不连续,怎么办呢?
因为不连续肯定每个字符尽量取后面的肯定更容易找出来反例。
显然如果直接往后面取没有意义,因为前面可能还有相同字母。
这样正解就呼之欲出了——每次贪心的选取之后第一次出现最后面的字母。
如果能取完 \(n\) 个就是有解的,否则无解。
预处理倒着开个桶找每个位置往后每个字母第一次出现的位置,然后正着做一次。
\(O((n+m)k)\)
https://codeforces.com/contest/1924/submission/244479375

B

有一条长度为 \(n\) 的数轴,每个位置依次编号为 \(1\sim n\)。上面有 \(m\) 个关键点 \(x_i\),第 \(i\) 个关键点有权值 \(v_i\)。保证 \(1,n\) 是关键点。
一个位置 \(p\) 的代价是它左侧最近的关键点的权值乘它到它右侧最近的关键点的距离。若 \(p\) 是一个关键点则其代价为 \(0\)。
\(q\) 次询问。

  • 1 x v 在点 \(x\) 处添加一个权值为 \(v\) 的关键点,保证之前 \(x\) 不是关键点。
  • 2 l r 查询区间 \([l,r]\) 的代价和。
    \(n,m,q\leq 3\times 10^5,v\leq 10^7,x\leq n\)。

sol

Trash problem。

set 维护关键点的位置,每次放置关键点之后只有这个点左右两边的两段会影响到。
转化成区间赋等差数列,区间求和。
线段树秒了。
\(O((n+q)\log n)\)
https://codeforces.com/contest/1924/submission/244480959

C

有一张正方形的纸,定义一次操作为将它的 \(4\) 个尖角向内折至中心,容易发现这样折之后仍然是一个正方形。
每次给定 \(N\),将一张纸不断重复折 \(N\) 次后展开,记 \(M\) 为所有凸折痕的长度和,\(V\) 为所有凹折痕的长度和。
记\(\dfrac{M}{V}=a+b\sqrt 2\),\(a,b\in \Q\),求 \(b\) 对 \(999999893\) 取模的值。
多测,\(n\le 10^9\),\(T\le 10^4\)

sol

Ad-Hoc 能不能 414!!111

首先你可以拿一张纸折着玩玩,或者和我一样用几何画板玩玩。
然后你会发现从第二次开始,每次凹折痕和凸折痕都是一样长的!
其实从第二次折痕开始,每次折的时候都折了正反交错的偶数层,所以每次凹折痕和凸的折痕都是一样长的。
考虑到每次边长是原来的 \(\dfrac{\sqrt{2}}{2}\) 倍,层数是 \(2\) 倍,长度就是上次的 \(\sqrt{2}\) 倍。
求比值不用关心绝对大小,不妨设初始正方形边长为 \(1\)(或者你可以设边长为 \(4\) 然后只关心左上四分之一部分的折痕)。
因此 \(n=1\) 的时 \(M=0,V=\sqrt{2}\)。
\(n\ge 1\) 时

\[M=V-\sqrt{2}=\sum_{i=0}^{n-2}(\sqrt{2})^i=\dfrac{(\sqrt{2})^{n-1}-1}{\sqrt{2}-1} \]

为了方便,你可以封装一个 \(a+b\sqrt{2}\) 的类。

\(O(T\log n\log P)\)
https://codeforces.com/contest/1924/submission/244505075

D

给定 \(n,m,k\),求有多少个由 \(n\) 个 (,\(m\) 个 ) 组成的序列满足最长的合法括号子序列的长度恰为 \(2k\),对 \(10^9+7\) 取模。
对 \(10^9+7\) 取模,\(n,m,k\leq 2000\)。

sol

神秘计数。

\(\min{n,m}\le k\) 肯定无解。
括号匹配考虑卡特兰数。
考虑 \((x,y)\) 代表前 \(x\) 个数字中左括号数量减去右括号数量为 \(y\),然后把所以的 \((x,y)\) 连成一条折线,起点为 \((0,0)\),终点为 \((n+m,n-m)\)。
考虑 \(k\) 个匹配的括号不难发现要求这条折线最低点为 \(k-m\)。
然后你发现这个东西不好算,我们可以设 \(f(t)\) 为最低点不高于 \(k-m\) 的方案数。答案就是 \(f(k-m)-f(k-m-1)\)。
考虑和 y=t 的最后一个交点翻一下,得到了 \((0,0)\) 到 \((n+m,2t-n+m)\) 的直线。方案数量为 \(\binom{n+m}{t+m}\)。
因此答案为 \(\binom{n+m}{k}-\binom{n+m}{k-1}\)。
\(O(T+n)\)
https://codeforces.com/contest/1924/submission/244491378

E

\(n\times m\) 的矩形纸片,每次均匀随机选择一条平行于坐标轴不是边缘线的线切开,保留左半边或者上半边,直到面积小于 \(k\)。
求期望次数,对 \(10^9+7\) 取模。
\(1\le n,m,\sum n,\sum m\le 10^6\),\(1\le k\le 10^{12}\)

sol

感觉非常 at,感觉是出题人玩神导致的。

我会 \(O(n^2)\) DP!然而没什么用,不过鱼直接硬干干出来了,但是我不会生成函数&多项式。
考虑一个长度为 \(n+m-2\) 的排列,依次选择(如果不能裁就不能裁剪),然后拆开算每条边的贡献。
显然如果需要裁从上到下或者从左到右第 \(i\) 条边,那么显然这条边下面和右边的边都不能裁掉,需要在这条边之后。
然后你发现你还是没法做,因为你不知道裁这次前当前边的长度,导致你不知道另外一条边的范围是多少。
我们试着转换一下思路,我们假定裁完这条边之后 还能继续裁,也就是说我们先不考虑最后一次裁产生的贡献。
这样另外一边只需要小于 \(\lceil\dfrac{k}{i} \rceil\) 的边都应该在这条边之后出现就可以了。
记得最后答案加 \(1\)。
https://codeforces.com/contest/1924/submission/244773100
\(O(\sum (n+m) )\)

F

\(n\) 个人中有一个缺席。你需要在 \(\lceil\log_{1.116}n\rceil-1\) 次询问得到缺席的人在哪两个人中的。
每次询问选定 \([l,r]\),你可以知道 \([l,r]\) 中来的人数,但是每次询问得到的结果为 \(r-l+1\) 或者 \(r-l\),但是并不一定为真。
保证不存在连续的三个回答都是真或者都是假。
\(1\le n,\sum n\le 10^5\)

sol

*3500 神仙交互题
注意到 \(\sqrt[4]{1.5}\approx 1.106\) 这与 \(1.116\) 比较相近。
也就是说我们需要试着在 \(4\) 次询问中从 \(3\) 组中排除掉 \(1\) 组人。
然后我们大概就有了这样一个询问树。(显然左右对称)

注:
\(1,2\) 代表询问第 \(1,2\) 组,\(1,3\) 代表询问第 \(1,3\) 组,其余类推。
\(1\) 代表从询问得知其中有缺席,\(0\) 代表没有。
\(3\) x 代表排除了第 \(3\) 组。

但是问题在于,\(1.106<1.116\),多余的询问如何减少呢?
我们发现如果排除了第二组的情况会少很多,并且都是只用三次询问就排除的,所以我们考虑不均匀分组。
似乎可以用 DP 等方法计算最优解。
取三组分别为 \(36\%,28\%,36\%\) 即可通过。
https://codeforces.com/contest/1924/submission/245013194

标签:10,le,题解,sum,sqrt,921,Div,关键点,折痕
From: https://www.cnblogs.com/jiangtaizhe001/p/18009349

相关文章

  • U405333 帕鲁世界迷路的一天 题解
    题目链接:帕鲁世界迷路的一天前置弱化版:P3604美好的每一天题解一个非常简单的普通莫队解很容易写出来,具体的看我前置弱化版题解,然而这个复杂度高达\(O(26n\sqrt{q})\),显然无法通过强化版。一种看上去很正确的“假解”我们思考如何去掉这个\(26\),我们猜想:能够组成\(pre[c......
  • [ARC171] A~D 题解
    [ARC171]A~D题解A.NoAttacking最优策略是车隔行放,分讨一下就可以了。if(n<a)cout<<"No\n";else{if(a*2<n)b-=(a+1)*(n-a);else{b-=(n-a)*(n-a);if(b<=0)cout<<"Yes\n";......
  • P3219 [HNOI2012] 三角形覆盖问题&P1222 三角形 题解
    严格单$\log$做法,附实现细节和代码。考虑从左往右扫描线,发现每次操作是线段上端点$-1$,插入线段,删除退化成点的线段。如果某时刻一条线段被另一条完全覆盖,那么这条线段显然不会产生贡献,可以删去。最后得到的线段一定是左端点单调递增时,右端点也单调递增,可以用set维护。当两......
  • P10145 [WC/CTS2024] 线段树 题解
    Link纪念一下场切题。题意:给定一棵(分点不一定为中点)的线段树,给定若干个询问区间,问有多少个线段树上结点的集合,知道了这些结点对应的区间和就可以知道任何一个询问区间的和。从询问区间开始考虑。会发现可以把所有\(a_i\)分成若干个集合,只要知道每个集合的和就可以知道所有询......
  • 浅谈甲类生产厂房应急照明和疏散指示系统的设计问题解析
    摘要:文章结合电气设计项目实践经验,分析了甲类生产厂房消防应急照明和疏散指示系统设计中照明灯和标志灯的设置、疏散走道和疏散通道的规划、集中控制型系统类型的选择、电压等级的选择中存在的问题,总结了相关经验,可以为同类工程提供参考。关键词:甲类生产厂房;消防应急照明和疏散指示......
  • 题解 CF1876B
    题意给定一个数组\([a_1,a_2,a_3.\cdots,a_n]\),一开始所有元素都为白色。你可以选定其中的至少一个元素涂成黑色,共有\(2^n-1\)种涂法。此时对于所有黑色元素\(a_i\),下标为\(i\)的倍数的所有白色元素都将变成绿色。此时数组中所有黑色和绿色元素的最大值记为此种涂法的......
  • 洛谷 P10145 [WC/CTS2024] 线段树 题解--zhengjun
    提供一种考场做法,在思路上和官方题解的差异蛮大的,虽然结果差不多。首先需要发现\([l,r)\)区间可以算出来的充要条件是:如果对于每个选中的节点\(u\),连无向边\((L_u,R_u)\),则当且仅当\(l\)和\(r\)连通时区间\([l,r)\)可以算出来。证明的话,用前缀和理解这些东西,分别考虑......
  • 题解 CF1849D
    萌新的第一篇题解题目大意对于一个初始颜色都为蓝色的数组\(a_1,a_2,\dots,a_n\)其中\(a_n\in\{0,1,2\}\),现在可以进行两个操作:花费\(1\)个金币,将\(a_i\)涂成红色;选择一个红色的\(a_i>0\),将\(a_{i-1}\)或\(a_{i+1}\)涂成红色,同时\(a_i\)减\(1\)。输出金......
  • F. 乘积最大(题解)
    题目今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度为......
  • [ARC135D] Add to Square 题解
    题目链接点击打开链接题目解法很牛的题!!!先考虑一步很牛的转化:把矩阵黑白染色,且\(i+j\)为奇数的位置的值取反,每次操作变为左上右下\(+v\),左下右上\(-v\)这样有啥好处?操作不会使行和列的和改变考虑答案的下界显然是:\(\max\{\)行的绝对值之和,列的绝对值之和\(\}\)这里给出......