我 AK 的第二场(?)的 Div.2,还捡了个 rk4(虽然我 div2 only 的最高记录是 rk2)祭之(

A

这题我竟然 WA 了两发,丢人(

直接贪心,对于 \(i=1,2,\cdots,n-1\),每次拿 \(i\) 和 \(n\) 执行操作,直到 \(a_i=0\) 或用完所有操作次数为止

B

这题我竟然 WA 了一发,丢人(

题目等价于是否可以将原数组划分为 \(\ge 2\) 段满足每段异或和相同。

首先如果所有数异或和都是 \(0\),由于 \(n\ge 2\),那么随便找一个断点 \(i\in[1,n-1]\) 并将 \([1,i]\) 异或在一起,\([i+1,n]\) 异或在一起一定可以得到两个相等的数。

否则显然不可能将原数组划分成偶数段,并且每一段的异或和都是 \(S=\operatorname{xor}\limits_{i=1}^na_i\),这个直接贪心好了,就不断向右扫描,如果扫到一个前缀异或和 \(S\) 就多划分一段,然后看划分出来的段数是否 \(\ge 2\)

时间复杂度 \(\mathcal O(n)\)

C

首先我们检查是否原来的数组就是好的,这个显然可以背包检验,如果是那么直接输出 \(0\) 好了。

否则可以证明一步操作就能将原数组变为好的数组,具体构造就是找出最大的 \(k\) 满足 \(\forall i,2^k\mid a_i\) 然后令所有 \(a_i\leftarrow\dfrac{a_i}{2^k}\),然后找到满足 \(a_i\) 是奇数的下标 \(i\) 并将 \(a_i\) 删除即可,至于正确性,显然除以 \(2^k\) 是不影响数组究竟是不是好的,而由于原数组不是好的,必然有 \(\sum a_i\) 为偶数,故删去某个 \(a_i\) 是奇数的 \(a_i\) 后必然有 \(\sum a_i\) 为奇数,也就变成好的数组了,又由于 \(k\) 为最大的满足 \(\forall i,2^k\mid a_i\) 的数,这样的 \(i\) 一定存在,得证。

D

首先一个显然的性质是 \(\text{lcm}(a_1,a_2,\cdots,a_n)=a_1a_2\cdots a_n\leftarrow\forall i\ne j,\gcd(a_i,a_j)=1\),故考虑将每个数分解质因数,然后对于每个 \(l\) 找出最大的 \(r\) 满足 \([l,r-1]\) 符合条件——这个显然可以 two pointers 求出,时间复杂度 \(n\omega(a_i)\)。然后倍增一下即可。

E

这个题还算有点意思,i 了 i 了((

首先考虑对于一个排列 \(p\),最少需要多少操作才能从 \(1,2,\cdots,n\) 变成 \(p\)——显然对于一个最少操作次数为 \(x\) 的排列 \(p\),其会对 \(ans_x,ans_{x+2},ans_{x+4},\cdots,ans_{x+2t},t\in\mathbb{Z}\) 产生 \(1\) 的贡献,因为对于某个固定的 \(i,j\) 交换两次之后就会复位。而这个最小操作次数显然可以从置换的角度理解,我们将 \(p\) 拆成一个个置换环,对于一个置换环 \(x_1,x_2,\cdots,x_m\) 我们显然可以依次交换 \((x_{m-1},x_m),(x_{m-2},x_{m-1}),\cdots,(x_2,x_1)\),这样 \(m-1\) 次操作即可复位,操作次数为 \(m-1\),因此总操作次数就是 \(\sum(\text{置换环大小}-1)\)

接下来考虑怎样计算答案,考虑 \(dp\),我们记 \(dp_{i,j,k}\) 表示考虑了大小在 \([2,i]\) 中的置换环,所有置换环大小 \(-1\) 之和为 \(j\),所有置换环大小之和为 \(k\) 的方案数,转移就枚举选择了 \(c\) 大小为 \(i+1\) 的置换环,那么 \(dp_{i+1,j+ci,k+c(i+1)}\leftarrow dp_{i,j,k}\times M\),其中 \(M\) 为将 \(c\) 个大小为 \(i+1\) 的置换环塞进去的方案数,具体来说 \(M=\dbinom{n-k}{i+1}\times\dbinom{n-k-(i+1)}{i+1}\times\cdots\times\dbinom{n-k-(i+1)\times(c-1)}{i+1}\times\dfrac{1}{c!}\times(i!)^c\),前面那一坨二项式系数就是从剩余 \(n-k\) 个位置中选出 \(c(i+1)\) 个位置给这 \(c\) 个置换的方案数,\(\dfrac{1}{c!}\) 表示这 \(c\) 个置换本质上是相同的,故除以 \(c!\),后面又乘个 \((i!)^c\) 是因为长度为 \(i+1\) 的圆排列有 \(i!\) 个。这样枚举 \(i,j,k\) 再枚举 \(c\) 复杂度看似是 \(k^4\),不过不难发现 \(c\) 最多枚举到 \(\dfrac{k}{i}\),因此复杂度实际上是 \(k^3\ln k\),可以通过此题。

还有一点就是在计算 \(M\) 的过程中,我们要计算很多形如 \(\dbinom{x}{y}\) 的二项式系数的值,这里的 \(x\) 很大,因此无法预处理阶乘和阶乘逆元求出,不过注意到 \(y\) 可能的值很小,\(n-x\) 的值也很小,因此可以预处理出 \(c_{x,y}\) 表示 \(\dbinom{n-x}{y}\) 这样就不用转移的时候再 \(\mathcal O(k)\) 地计算二项式系数的值了。

据说这题 \(k\) 可以扩大到 \(2000\)?orzorz,果然还是 wtcl 了啊/kk

Codeforces Round #717 (Div.2) 题解的更多相关文章

  1. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  2. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  3. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  4. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  5. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  6. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  7. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  8. Codeforces Round #160 (Div. 1) 题解【ABCD】

    Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...

  9. Codeforces Round #383 (Div. 2) 题解【ABCDE】

    Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...

随机推荐

  1. HCNP Routing&Switching之BGP路由宣告

    前文我们了解了BGP报文结构.类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html:今天我们来聊一聊BGP路由宣告 ...

  2. 如何再一台电脑上配置多个tomcat同时运行

    1.配置运行tomcat 首先要配置java的jdk环境,这个就不在谢了  不懂去网上查查,这里主要介绍再jdk环境没配置好的情况下 如何配置运行多个tomcat 2.第一个tomcat: 找到&qu ...

  3. OO电梯作业总结

    (一)第五次作业 一.设计思路 生产消费者模型,输入接口是producer,调度器是tray,电梯是customer.由于只有一架电梯,所以生产消费模型满足以下条件: 一个生产者,一个消费者 托盘不为 ...

  4. 计算机网络之流量控制(停止-等待协议、滑动窗口、后退N帧协议GBN、选择重传协议SR)、滑动窗口、可靠传输机制

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/104908762 学习课程:<2019王道考研计算机网络> 学习目的 ...

  5. python numpy版本报错: File "*\numpy\__init__.py", line 305, in <module> _win_os_check()

    具体代码如下所示: from numpy import * import operator a = random.rand(4, 4) print(a) 具体报错内容如下所示: Traceback ( ...

  6. Java之父 James Gosling 发表博文 《Too Soon》纪念乔布斯。

    几个礼拜前,我们还在讨论乔布斯的辞职.虽然我们都知道这意味着什么,但是我没有想到一切来的如此之快.已经有很多关于这件事情的文章了,特别是"经济学人"的这篇文章. 乔布斯是一个很独特 ...

  7. cm2 逆向分析

    目录 cm2 逆向分析 前言 查壳 逆向分析 encrypt函数 POC代码 cm2 逆向分析 前言 这是逆向实战之CTF比赛篇的第3篇,在这里我就不再讲的特别小白了,有些简单操作可能会略过. 查壳 ...

  8. java容器之HashMap

    HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的. 解决哈希冲突的三个方法: a.开放 ...

  9. win10+MX350显卡+CUDA10.2+PyTorch 安装过程记录 深度学习环境配置

    https://blog.csdn.net/m0_37867091/article/details/105788637

  10. (原创)WinForm中莫名其妙的小BUG——ComboBox 尺寸高度问题

    一.前言 使用WinForm很久了,多多少少遇到一些小BUG. 这些小BUG影响并不严重,而且只要稍微设置一下就能正常使用,所以微软也一直没有修复这些小BUG. 本来并不足以写篇文章去记录,但是昨天遇 ...