CF #717 题解
CF #717 题解
A - Tit or Tat
贪心地从前面拿数,加到最后一位即可。
B - AGAGA XOOORRR
转化一下,是求是否能把序列分成若干段( ≥ 2 \ge 2 ≥2),每段的异或和都相等。
假设序列的前缀异或和为 S n S_n Sn,共分了 k k k 段,第 i i i 段的最后一个元素是 a i ( a k = n ) a_i(a_k=n) ai(ak=n)。
于是有
S a 1 = S a 1 ⊕ S a 2 = S a 2 ⊕ S a 3 = ⋯ = S k − 1 ⊕ S k S_{a_1}=S_{a_1}\oplus S_{a_2}=S_{a_2}\oplus S_{a_3}=\dots = S_{k-1}\oplus S_k Sa1=Sa1⊕Sa2=Sa2⊕Sa3=⋯=Sk−1⊕Sk
然后就发现:
S a 1 = S a 3 = S a 5 = … S_{a_1}=S_{a_3}=S_{a_5}=\dots Sa1=Sa3=Sa5=…
S a 2 = S a 4 = S a 6 = ⋯ = 0 S_{a_2}=S_{a_4}=S_{a_6}=\dots=0 Sa2=Sa4=Sa6=⋯=0
考虑一下 n = a k ( k ≥ 2 ) n=a_k(k\ge 2) n=ak(k≥2) 是多少:
- 若 k k k 是偶数,则需要 S n = 0 S_n=0 Sn=0,这足以满足条件。
- 若 k k k 是奇数,则需要 ∃ a 1 ∈ [ 1 , n − 1 ] , S n = S a 1 \exist a_1 \in[1, n-1],S_n=S_{a_1} ∃a1∈[1,n−1],Sn=Sa1 且 ∃ t ∈ [ a 1 + 1 , n − 1 ] , S t = 0 \exist t\in [a_1+1,n-1],S_t=0 ∃t∈[a1+1,n−1],St=0。
如上,可以 O ( n ) O(n) O(n) 判断。
C - Baby Ehab Partitions Again
先转化一下问题,要给每个 i ∈ [ 1 , n ] i\in [1,n] i∈[1,n] 钦定一个 x i ∈ { − 1 , 1 } x_i\in \{-1, 1\} xi∈{−1,1},使 ∑ i a i x i = 0 \sum_i a_ix_i=0 ∑iaixi=0。
稍微再转化一下,两边加上 S = ∑ i a i S=\sum_i a_i S=∑iai,得到这样一个问题:
n n n 个数可以选或不选(假设选了的数是 a 1 ′ , a 2 ′ , ⋯ a k ′ a'_1,a'_2,\cdots a'_k a1′,a2′,⋯ak′),是否可能
S = 2 ∑ i = 1 k a i ′ S = 2\sum_{i=1}^k a'_i S=2i=1∑kai′
显然容易 O ( n 2 V ) O(n^2V) O(n2V) 用背包判断一开始能否完成条件(并且要注意到这里 S S S 一定要是偶数),若不能完成,答案就是 0。
问题来了,如果可以构成,如何删去最小的数使其不能构成?
- 如果 a i a_i ai 中有奇数,直接把它去掉, S S S 就变成奇数了,达成条件;
- 否则,所有数都是偶数,把它们全部除以 2 和原问题有相同的解。一直除到有数成为奇数,转化为上一种情况即可。
D - Cut
显然,若干个数乘积等于它们的最小公倍数等价于这些数两两互质。对每个数先求出在它之后的第一个与它不互质的数,由于 1 0 5 10^5 105 之内每个数至多有五个质因子,可以暴力质因子枚举。不妨把这个数叫做 n x t i nxt_i nxti。那么,如果选择某个数作为左端点,区间右端点最多延伸到哪里呢?我们形象地把这个操作叫做“跳”,即从一个左端点贪心地延伸最大区间,直到不能延伸,到下一个区间的左端点,记这个左端点为 f i f_i fi。则有 f i = min j = i n n x t j f_i=\min_{j=i}^nnxt_j fi=minj=innxtj。发现 f f f 数组可以倍增,所以可以 O ( log n ) O(\log n) O(logn) 完成一次询问。若将枚举质因子视为 O ( 1 ) O(1) O(1),则本题复杂度为 O ( V + n + q log n ) O(V + n + q\log n) O(V+n+qlogn)。
E - Baby Ehab Plays with Permutations
我们先算出一个长度为 n n n 的、恰好最少需要 k k k 次交换的排列数量。这可以用一个简单的 d p dp dp:设 f ( n , k ) f(n, k) f(n,k) 为该答案,则有 f ( n , k ) = f ( n − 1 , k ) + ( n − 1 ) f ( n − 1 , k − 1 ) f(n,k) = f(n-1,k) + (n-1) f(n-1, k-1) f(n,k)=f(n−1,k)+(n−1)f(n−1,k−1)。这可以考虑最后一个元素是否需要与前面交换,若要交换会交换到哪里(注意到被交换到了的那个元素已经有序)。那么,对于 k k k 的询问,答案就是 ∑ i = 0 k / 2 f ( n , k − 2 i ) \sum_{i=0}^{k/2}f(n,k-2i) ∑i=0k/2f(n,k−2i)。这样做的时间是 O ( n k ) O(nk) O(nk)。
考虑到 k k k 次交换至多会导致 2 k 2k 2k 个位置发生变化,能不能先挑出 i ( 0 ≤ 2 k ) i(0\le 2k) i(0≤2k) 个位置,然后单独把它们组成的序列进行交换(其它 n − i n-i n−i 个位置保持不变)呢?直觉告诉我们一定会算重,不过我们发现可以使用错排进行容斥。我们设 n n n 个元素用 k k k 次交换,且交换后各个元素都不在原来位置的方案数为 g ( n , k ) g(n,k) g(n,k)。则最后答案为 a n s ( k ) = ∑ i = 0 2 k ( n i ) g ( i , k ) ans(k)=\sum_{i=0}^{2k}\binom{n}{i}g(i,k) ans(k)=∑i=02k(in)g(i,k)。
我们考虑怎么计算 g ( n , k ) g(n,k) g(n,k) 。套路性的设限制 P i P_i Pi 表示第 i i i 个数原地不动, M ( t ) M(t) M(t) 表示钦定有 t t t 个限制得到满足,其它随意, N ( t ) N(t) N(t) 表示恰好有 t t t 个限制得到满足。
则有
M ( t ) = ∑ i = t n ( i t ) N ( i ) M(t)=\sum_{i=t}^n\binom{i}{t}N(i) M(t)=i=t∑n(ti)N(i)
根据二项式反演,
N ( t ) = ∑ i = t n ( − 1 ) i − t ( i t ) M ( i ) N(t)=\sum_{i=t}^n(-1)^{i-t}\binom{i}{t}M(i) N(t)=i=t∑n(−1)i−t(ti)M(i)
而 M ( t ) = ( n t ) f ( n − t , k ) M(t)=\binom{n}{t}f(n-t,k) M(t)=(tn)f(n−t,k),则
g ( n , k ) = N ( 0 ) = ∑ i = 0 n ( − 1 ) i ( n i ) f ( n − i , k ) g(n,k)=N(0)=\sum_{i=0}^n(-1)^{i}\binom{n}{i}f(n-i,k) g(n,k)=N(0)=i=0∑n(−1)i(in)f(n−i,k)
(当然注意到这里的 f f f 是修改过的 f f f),即由“最小 k k k 次”变为了“用 k k k 次”。
于是可以 O ( k 3 ) O(k^3) O(k3) 计算。
CF #717 题解相关推荐
- CF 1742C 题解 P8557 炼金术(Alchemy) 题解
温馨提示:\color{#E74C3C}\text{温馨提示:}温馨提示: 遇见题解勿抄袭,棕名封号两行泪.\color{#E74C3C}\text{遇见题解勿抄袭,棕名封号两行泪.}遇见题解勿抄袭, ...
- CF 1742C 题解
温馨提示:\color{#E74C3C}\text{温馨提示:}温馨提示: 遇见题解勿抄袭,棕名封号两行泪.\color{#E74C3C}\text{遇见题解勿抄袭,棕名封号两行泪.}遇见题解勿抄袭, ...
- CF 666E 题解
CF666E 题解 首先可以将所有的串用无关字符连接起来:s[1]+'#'+s[2]+'#'-s[n] 然后建一个SAM. 在每一个节点上搞一个动态开点线段树. 然后从下往上线段树合并. 最后像最长公 ...
- 【codeforces】【比赛题解】#915 Educational CF Round 36
虽然最近打了很多场CF,也涨了很多分,但是好久没写CF的题解了. 前几次刚刚紫名的CF,太伤感情了,一下子就掉下来了,不懂你们Div.1. 珂学的那场我只做了第一题--悲伤. 这次的Education ...
- CF 742 B-Arpa’s obvious problem and Mehrdad’s terrible solution
传送门 : CF 742B 题解 异或逆运算 AC code: /*adrui's submission Language : C++ Result : Accepted Lover : zyy Fa ...
- HZOJ 赤(CF739E Gosha is hunting)
本来没有打算写题解的,时间有点紧.但是这个wqs二分看了好久才明白还是写点东西吧. 题解就直接粘dg的了: 赤(red) 本题来自codeforces 739E,加大了数据范围. 首先对一只猫不会扔两 ...
- Codeforces Round #368 (Div. 2)
5/5 失踪多天发一下CF的题解,突然发现CF题解评论区一堆大神在晒解法,我等渣渣就顺手膜拜了一发,学了不少姿势,以后一打完CF就去评论区找姿势好了...... 最近有一个感悟,就是不要让别人告诉你一 ...
- CF76A·gift
初见安~[第一次写CF的题解QwQ]这里是传送门:Codeforces 76A Description The kingdom of Olympia consists of N cities and ...
- codeforces 186D Mushroom Scientists 不等式
http://codeforces.com/blog/entry/4488 还是直接看cf的题解吧 am-gm不等式.. 又学到了 #include <iostream> #include ...
最新文章
- 我是如何每周坚持 5 天自学机器学习,并拿到offer的
- 计算机tlv简介_TLV2462
- [译]RxJS文档04——Observer 观察者
- Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)
- 成功解决from nets import inception_resnet_v2 ModuleNotFoundError: No module named 'nets'
- stm32f302 can通讯_福特福克斯发动机无法启动,诊断电脑还通讯不了怎么修?
- python socket编程详细介绍
- ios::app与ios::ate打开方式有什么不同??
- did双重差分法_Stata中双重差分操流程及代码
- 分布式、云原生技术之后,分布式云或成数字化转型新利器
- HTML5-Tab标签
- 卸载java_Java面试必备——类的加载过程
- 心得复述知识体系:《强化学习》中的蒙特卡洛方法 Monte Carlo Methods in Reinforcement Learning
- 《Elementary Methods in Number Theory》勘误
- web与app开发java_移动web开发和移动app开发的区分
- 2合1笔记本 android,华为二合一笔记本支持Android可能是鸡肋
- WORD分节、分页、设不同页码页眉的方法
- 经典作品推荐CLANNAD(含下载、汉化、周边和攻略,真正全语音)
- 极客时间前端进阶特训营winter、杨村长、然叔、高少云,《精通React》大专栏,React低代码项目,前端算法实战,杨村长Vue3开源组件库实战(Vue3+Vite+VitePress+TSX+T
- 高中数学怎么学好如何轻松学好高中数学