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 ∑i​ai​xi​=0。

稍微再转化一下,两边加上 S = ∑ i a i S=\sum_i a_i S=∑i​ai​,得到这样一个问题:

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∑k​ai′​

显然容易 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=in​nxtj​。发现 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/2​f(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 题解相关推荐

  1. CF 1742C 题解 P8557 炼金术(Alchemy) 题解

    温馨提示:\color{#E74C3C}\text{温馨提示:}温馨提示: 遇见题解勿抄袭,棕名封号两行泪.\color{#E74C3C}\text{遇见题解勿抄袭,棕名封号两行泪.}遇见题解勿抄袭, ...

  2. CF 1742C 题解

    温馨提示:\color{#E74C3C}\text{温馨提示:}温馨提示: 遇见题解勿抄袭,棕名封号两行泪.\color{#E74C3C}\text{遇见题解勿抄袭,棕名封号两行泪.}遇见题解勿抄袭, ...

  3. CF 666E 题解

    CF666E 题解 首先可以将所有的串用无关字符连接起来:s[1]+'#'+s[2]+'#'-s[n] 然后建一个SAM. 在每一个节点上搞一个动态开点线段树. 然后从下往上线段树合并. 最后像最长公 ...

  4. 【codeforces】【比赛题解】#915 Educational CF Round 36

    虽然最近打了很多场CF,也涨了很多分,但是好久没写CF的题解了. 前几次刚刚紫名的CF,太伤感情了,一下子就掉下来了,不懂你们Div.1. 珂学的那场我只做了第一题--悲伤. 这次的Education ...

  5. 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 ...

  6. HZOJ 赤(CF739E Gosha is hunting)

    本来没有打算写题解的,时间有点紧.但是这个wqs二分看了好久才明白还是写点东西吧. 题解就直接粘dg的了: 赤(red) 本题来自codeforces 739E,加大了数据范围. 首先对一只猫不会扔两 ...

  7. Codeforces Round #368 (Div. 2)

    5/5 失踪多天发一下CF的题解,突然发现CF题解评论区一堆大神在晒解法,我等渣渣就顺手膜拜了一发,学了不少姿势,以后一打完CF就去评论区找姿势好了...... 最近有一个感悟,就是不要让别人告诉你一 ...

  8. CF76A·gift

    初见安~[第一次写CF的题解QwQ]这里是传送门:Codeforces 76A Description The kingdom of Olympia consists of N cities and  ...

  9. codeforces 186D Mushroom Scientists 不等式

    http://codeforces.com/blog/entry/4488 还是直接看cf的题解吧 am-gm不等式.. 又学到了 #include <iostream> #include ...

最新文章

  1. 我是如何每周坚持 5 天自学机器学习,并拿到offer的
  2. 计算机tlv简介_TLV2462
  3. [译]RxJS文档04——Observer 观察者
  4. Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)
  5. 成功解决from nets import inception_resnet_v2 ModuleNotFoundError: No module named 'nets'
  6. stm32f302 can通讯_福特福克斯发动机无法启动,诊断电脑还通讯不了怎么修?
  7. python socket编程详细介绍
  8. ios::app与ios::ate打开方式有什么不同??
  9. did双重差分法_Stata中双重差分操流程及代码
  10. 分布式、云原生技术之后,分布式云或成数字化转型新利器
  11. HTML5-Tab标签
  12. 卸载java_Java面试必备——类的加载过程
  13. 心得复述知识体系:《强化学习》中的蒙特卡洛方法 Monte Carlo Methods in Reinforcement Learning
  14. 《Elementary Methods in Number Theory》勘误
  15. web与app开发java_移动web开发和移动app开发的区分
  16. 2合1笔记本 android,华为二合一笔记本支持Android可能是鸡肋
  17. WORD分节、分页、设不同页码页眉的方法
  18. 经典作品推荐CLANNAD(含下载、汉化、周边和攻略,真正全语音)
  19. 极客时间前端进阶特训营winter、杨村长、然叔、高少云,《精通React》大专栏,React低代码项目,前端算法实战,杨村长Vue3开源组件库实战(Vue3+Vite+VitePress+TSX+T
  20. 高中数学怎么学好如何轻松学好高中数学

热门文章

  1. 微信编辑器字体不能随便使用,小心侵权警告
  2. 全球及中国抹墙机行业发展态势及投资方向分析报告2022-2028年
  3. 什么是TTL电平、CMOS电平?两者的区别
  4. 当下,什么样的程序员最吃香
  5. 微软Morro计划和平民软件
  6. 挂载群辉的NFS共享文件夹
  7. poj 1679 The Unique MST
  8. 字符串分割QString::section
  9. RK3568平台开发系列讲解(驱动篇) linux设备驱动模型
  10. 如何分析kernel oops