首页 > 其他分享 >Codeforces 833 题解

Codeforces 833 题解

时间:2022-11-14 09:24:28浏览次数:51  
标签:subset 833 le frac 题解 30 Codeforces Sigma equiv

A

\(n\) 是奇数时恰好可以用完,\(n\) 是偶数时多出来的一块没用,所以直接输出 \((n+1)/2\) 即可。

B

每个字符出现次数都小于等于字符总数,令 \(\Sigma\) 是字符集大小,那显然有 \(|S|\le\Sigma^2\),如果大于的话根据抽屉原理,存在一个字符出现次数大于 \(\Sigma\),显然寄了,所以直接枚举就行,复杂度是 \(O(n\Sigma^2)\) 的。

C

做前缀和,称前缀和数组为 \(s\),我们把 \(a\) 根据 \(0\) 划分成多段 \([l_1,r_1],[l_2,r_2], \cdots, [l_k,r_k]\) 满足 \(a_{l_i}=0, r_i+1=l_{i+1}\),我们可以操作所有的 \(a_{l_i}\),相当于对整个后缀操作,那我们可以用 \(a_{l_i}, a_{l_{i+1}}\) 同时操作使得一段同时加上一个任意数,而答案是前缀和最多的 \(0\) 的个数,双指针+map统计每段内出现次数最多的数字即可,注意答案要加上 \([1,l_1-1]\) 段内 \(s\) 恰好是 \(0\) 的个数。

D

约定:对于 \(x,y\in N^{*}\),称 \(x \subset y\) 当且仅当 \(x|y=y\),称 \(z(x)\) 为 \(x\) 二进制末尾 \(0\) 的个数。
直接的想法是说构造一个 \(x\) 使得 \(a|b \subset x\),并且 \(d|x\),这样 \(a|x=b|x=x\),满足题意。
观察题目发现 \(x<2^{60}\),而 \((a|b) < 2^{30}\),这启发我们直接构造 \(x=t*2^{30}+(a|b)\),其中 \(t < 2^{30}\),相当于把两个 \(2^{30}\) 以内的数 \(t\) 和 \(a|b\) 在二进制下拼起来,接下来考虑如何构造 \(t\)。
\(t\) 要满足的条件就是说 \(-t*2^{30} \equiv a|b \pmod d\)。
现在唯一的问题是 \(2^30\) 的逆元不一定存在,但是我们发现若 \(z(d)>z(a|b)\) 一定是无解的,因为任意的 \(z(kd) \ge z(d) > z(a|b)\),故不存在 \(x=kd\) 且 \((a|b) \subset x\),而对于 \(z(d)\le z(a|b)\) 的情况,我们直接把 \(2^{z(d)}\) 约掉,相当于 \(-t*2^{30-z(d)} \equiv \frac{a|b}{2^{z(d)}} \pmod {\frac{d}{2^{z(d)}}}\),\(t \equiv -\frac{1}{2^{30-z(d)}}\frac{a|b}{2^{z(d)}} \pmod {\frac{d}{2^{z(d)}}}\),注意其中 \({\frac{d}{2^{z(d)}}}\) 和 \(\frac{a|b}{2^{z(d)}}\) 是直接除掉的,而 \(\frac{1}{2^{30-z(d)}}\) 是 \(2^{30-z(d)}\) 在模 \({\frac{d}{2^{z(d)}}}\) 意义下的逆元。
赛时样例都没过,因为求逆元写了个 \((2^{30-z(d)})^{mod-2}\),实际上应该是 \((2^{30-z(d)})^{\varphi(mod)-1}\),因为 \({\frac{d}{2^{z(d)}}}\) 不一定是质数,,,,,,,比赛结束后 20 分钟才调出来,寄。

E

憨憨题,没来的及做,亏麻了。
直接建出笛卡尔树,那么显然如果 \(a,b\) 的笛卡尔树相同就是符合条件的。
考虑 dp 统计这个东西,因为 \(\sum n*m \le 10^6\),直接设计一个 \(f_{u,i}\) 表示 \(u\) 为根子树,放入数字是 \([1,i]\) 时的方案数,考虑转移,如果位置 \(u\) 放的数字不是 \(i\),这种情况的方案数就是 \(f_{u,i-1}\),如果放的是 \(i\),那么这个 \(i\) 必然是整个区间中最靠左的 \(i\),也就是左子树只能放 \([1,i-1]\),右子树可以放 \([1,i]\),把这两种方案数乘起来即可。
由上得出:

\[f_{u,i}=f_{u,i-1}+f_{lc,i-1}*f_{rc,i} \]

具体写的时候注意下空的情况,开数组的话可以搞 \(n\) 个长度为 \(m+1\) 的 vector 之类的。

标签:subset,833,le,frac,题解,30,Codeforces,Sigma,equiv
From: https://www.cnblogs.com/chengchunhao/p/16887991.html

相关文章

  • CF1292E Rin and The Unknown Flower 题解
    IO交互题fflush(stdout)害人不浅!!1注意到如果我们发起询问C和O就可以花费2的代价知道整个串,不过代价过高,所以我们考虑减小点代价。考虑发起询问CO,CH,CC,这样我......
  • TheNameCalculator题解
    TheNameCalculator题解题目链接:TheNameCalculator题解首先看程序开启的保护,有Canary和NX栈不可执行。IDA打开程序,shift+F12查看字符串,发现有"Hereisyourflag:"。点......
  • Codeforces Round #833 (Div. 2) A--B
    A思路:直接盲猜x/2上取整。应该写成(x+1)/2最好#include<bits/stdc++.h>#defineendl'\n'usingnamespacestd;voids(){intn;cin>>n;cout<<(n+1)/2<<......
  • 833——B题题解
    题目链接题目大意:给一串字符串(只包含0~9),定义一个最优子串的定义:如果该子串同字符种类数大于最最多字符出现数,那么这个子串可以被称为最优子串。解题思路:大眼一看这个数......
  • [ARC086F] Shift and Decrement 题解
    linkSolution一个简易的贪心想法是我们肯定是对于一个相同的序列求出操作到它的最小操作次数,看能否\(\leK\)。注意到我们在第\(x\)次A操作后进行\(-1\)操作相当于......
  • 833(DIV2)——C题题解
    题目链接题目大意:给定n个数,你可以对数值为0的数改变其为任意值,问最后前缀和为0的个数的最大值。思路:这题比较可惜,自己的思路没有问题,但是他少了一些东西。对数组进行前......
  • LG_P4588 [TJOI2018] 数学计算 题解
    LuoguP4588题解这个玩意还是挺好想到的,也不难看出他是一个线段树。没想到可以评上蓝。考虑每次操作对于答案的贡献。由于\(x=1\),所以我们相当于是在维护一堆数的积,初始......
  • DTOJ 3498 无限剑制 题解
    题面题目链接题解想了好久,其实很水tt想写题解主要是因为这题题面是Fate很有意思我们注意到“所有\(v_i\)值域在\([1,5]\)”这个部分分,这种情况下,初始的不同情......
  • DTOJ 5932 Counting 题解
    题目链接portal题解认识到了生成函数很好用,于是摆了一篇题解10分直接dp,\(f_{i,j}\)表示走了\(i\)步之后,当前位置在\(j\)的方案数然后就有状态转移方程\(f_{i,......
  • [VP]Codeforces Round #678 (Div. 2)
    诈骗题专场A.Reorder题意:给你一个长度为\(n\)的数组\(a\),问是否可以把这个重新排序后,使得\[\sum\limits^{n}_{i=1}\sum\limits^{n}_{j=i}\dfrac{a_j}{j}=m\]解法:......