本来开了某场远古 Div 1,然后学了一堆前置知识至今仍然不会 E。换一场写来得及吗?

A. Channel

模拟,略。

B. Split Sort

Description

给你一个长度为 \(n\) 的排列。

每次操作你可以选择一个数 \(x\),然后类似于快速排序地把小于 \(x\) 和大于等于 \(x\) 的分成两个序列,把它们拼在一起。

求最小操作次数使排列有序。

Solution

发现如果 \(i\) 在 \(i-1\) 前面,只有选择 \(i\) 进行操作能改变它们的相对位置。

且操作不会让有序的变无序,那么次数就是 \(pos_i>pos_{i-1}\) 的 \(i\) 的数量。

C. MEX Repetition

Description

给你一个长度为 \(n\) 的序列,保证值域 \([0,n]\) 并且没有重复元素。

一次操作定义为从 \(1\) 到 \(n\) 对每个 \(i\) 用 \(\operatorname{MEX}(a_1,a_2,...,a_n)\) 换掉 \(a_i\)。

求操作 \(k\) 次后的序列。\(n\le10^5,k\le10^9\) 。

Solution

发现给了 \(n\) 个数,值域为 \([0,n]\),那么 \(\text{MEX}\) 就是 \([0,n]\) 中唯一没出现那个。

考虑把没出现那个数放在序列最前面,那每次的操作就是交换 \(1,2\),交换 \(1,3\),直到交换 \(1,n+1\)。

找找规律可以发现这是个循环移位。

操作 \(n+1\) 次一定会回到原状态,因此 \(k\) 对 \(n+1\) 取模,暴力循环移位即可。

D. Two-Colored Dominoes

Description

给你一个网格,上面放了一堆 \(1\times 2\) 的多米诺骨牌。现在要给它们染色,满足:

  • 同一个骨牌的两个格不同色
  • 每行染成黑白的格数相同,列同理

    请构造方案。

Solution

发现横着放的骨牌对行没有影响,竖着放的骨牌对列没有影响。

也就是说只要考虑横着放的对列的影响,那么这个可以从左往右一列列贪心,可以证明是对的。

E.Speedrun

Description

你在玩一个游戏,要完成 \(n\) 个任务。其中对于每个任务 \(i\),它只能在某一天的第 \(h_i\) 时刻完成。游戏每天有 \(k\) 个小时,分别编号为 \(0,1,...k-1\)。

给出 \(m\) 对任务间的依赖关系,\((a_i,b_i)\) 表示 \(a_i\) 必须比 \(b_i\) 先完成。保证依赖关系不形成环。

完成任务不需要时间,也就是说可以在同一天的同一时刻先后完成多个任务。

求完成所有任务所需的最短时间。这里的时间定义为:完成最后一个任务的时刻 与 开始第一个任务的时刻 之差。

多组数据,\(T\le 10^5\),\(\sum n,m\le 2\times 10^5\),\(k\le 10^9\)。

Solution

假设我们知道每个任务开始做的时间。那么对于边 \((a,b)\),若 \(h_a<h_b\),则他们在同一天完成;否则令 \(b\) 在第二天的 \(h_b\) 时刻完成。使用拓扑排序不难求出最后一个任务被完成的时刻。

同样假设所有没有限制的任务都从同一天开始做,这样并不一定是最优的,比如样例 3 就是反例。也就是说,最优方案是形如把一部分靠前时刻的东西挪到第二天开始做。

而被推迟的任务满足这样几条性质:

  • 每个任务(包括非起点)最多只会推迟一天
  • 被推迟的起点任务是 \(h_i\) 的一个前缀

看起来似乎不难理解,所以证明留给读者自行解决。

至此,我们可以先假设它们都在同一天开始,求出答案;再按照 \(h_i\) 递增的顺序将起点任务推迟。根据第一条性质,可以记录数组 \(flag\) 表示那些点已经被推迟一天;而如果更新过程中遇到已经被推迟过的点,则不必继续更新。

综上,每个点最多只被更新了一次,时间复杂度 \(O(n)\)。

F. Divide, XOR, and Conquer

为什么不会做呢。/hsh

区间 DP,设 \(f_{i,j}\) 表示区间 \([i,j]\) 能否被保留。发现转移是 \(O(n)\) 的,总时间复杂度为 \(O(n^3)\)。

考虑优化转移,先观察异或的性质。设 \(s_{l,r}\) 表示区间 \([l,r]\) 的异或和。

考虑区间 \([l,k]\) 什么情况下能从 \([l,r]\) 转移过来 \((k<r)\),那么若 \(s_{l,r}\) 的第 \(x\) 位为 \(0\),不论 \(s_{l,k}\) 的这位取几都与另外一半相等。而 \(s_{l,r}\) 这位是 \(1\) 时,如果这是最高位的 \(1\),那 \(s_{l,k}\) 这位自然也必须取 \(1\);否则因为 \(s_{l,k}\) 前面已经比另一半大了,这一位取值无限制。

则 \([l,k]\) 能从 \([l,r]\) 转移过来当且仅当 \(s_{l,k}\) 在 \(\operatorname{highbit}(s_{l,r})\) 位上是 \(1\)。

维护 \(L_i\) 表示以 \(i\) 为左端点,所有能被保留区间出现的 \(\operatorname{highbit}\) 值按位或的结果,转移条件为 \(s_{i,j}\land L_i \neq 0\)。从左侧转移同理,转移复杂度变为 \(O(1)\)。

G. Swaps

Description

给定长度为 \(n\) 的序列 \(a\),每次操作可以选定一个 \(i\),并 \(\operatorname{swap}(a_i,a_{a_i})\)。求能通过某种操作顺序得到的不同序列数。

\(n\le 10^6\)。

Solution

考虑建图。对于每个 \(i\),连边 $i \to a_i $。则构造出一个 \(n\) 个点 \(n\) 条边的图,且每个点有且仅有一条出边。

定义操作 \(\operatorname{swap}(a_i,a_{a_i})\) 为“操作点 \(i\)”。观察对点 \(i\) 进行操作后图的变化(不考虑环),发现原图从 \(i\to a_i \to a_{a_i}\) 变为 \(i\to a_{a_i},a_i\to a_i\)。对于交换后不改变序列的情况,形如 \(u\to v\to v\),则操作不合法。由于每次操作都对图的结构进行改动不好处理,我们换一种方式,对 \(i \to a_i\) 这条边打个标记来表示对 \(i\) 进行了一次操作。

假设当前局面的点 \(i\),分为两种情况:

  • 点 \(i\) 存在一条入边被标记,那实际上的序列里 \(i\) 已经是自环了,不能再操作;
  • 点 \(i\) 不存在入边被标记,那么我们顺着 \(i\) 的出边走,直到找到第一条未被标记的边,把它打上标记。

完成操作后,对于一个给定的标记集合,可以用如下方式构造出实际序列:

  • 若点 \(i\) 存在入边被标记,\(a_i=i\);
  • 否则,\(a_i\) 的实际值为 沿着 \(i\) 的出边走,第一条未被标记的边 指向的点。

对边的标记集合进行计数。设每个点的入度为 \(in_i\),且每个点至多有一条入边被标记,则总方案数为 \(\prod\limits_{i=1}^n (in_i+1)\)。

但不是所有满足这个条件的标记集合都是合法的。考虑图中存在环的情况,并不能构造出一种方案,使这个环的所有边都被标记。因为这个环在只剩一条边未被标记时,实际的序列就已经所有 \(a_i=i\) 了。

这同时启发我们发现,对于一个环只有一条边未标记的情况,无论哪条边不被标记,生成的序列都是一样的。那么对于长度为 \(k\) 的环 \(c_1,c_2,\dots,c_k\),恰有一条边未被标记的方案数有 \(\sum\limits_{i=1}^k in_{c_i}\) 种,合法且不重复的方案数为:

\[\prod_{i=1}^k (in_{c_i}+1) -[(\sum_{i=1}^k in_{c_i})-1]-1=\prod_{i=1}^k (in_{c_i}+1) -\sum_{i=1}^k in_{c_i}
\]

则总方案数为:

\[\prod_{\operatorname{cycles}}(\prod_{i=1}^k (in_{c_i}+1) -\sum_{i=1}^k in_{c_i})\cdot\prod_{\operatorname{other\ v}}(in_v+1)
\]

H & I

*3500 谁爱写谁写。

Pinely Round 2 (Div. 1 + Div. 2) (CF1863)的更多相关文章

  1. CF Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)

    1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort    暴力枚举,水 1.题意:n*m的数组, ...

  2. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  3. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  4. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  5. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  6. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  7. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  8. Codeforces Beta Round #27 (Codeforces format, Div. 2)

    Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...

  9. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  10. Educational Codeforces Round 39 (Rated for Div. 2) G

    Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...

随机推荐

  1. 【线上技术分享】即构&MobTech袤博移动游戏开发者全能进阶沙龙

    游戏行业的兴起与当前移动互联网用户碎片化.休闲化的生活特征密不可分,在用户旺盛的需求下,游戏行业迎来了绝佳的发展机遇,今年上半年已多款游戏DAU过亿. 市场的火爆也为游戏行业带来了异常激烈的竞争,加上 ...

  2. 三个编程思想:面向对象编程、面向接口编程、面向过程编程【概念解析系列_1】【C# 基础】

    〇.前言 对于 .Net 中的编程思想还是十分重要的,也是编码出高效的程序的基础! 在使用之前了解其本质,那么用起来就游刃有余.下面来简单对比下三个编程思想,看下它们都是什么,它们之间又有什么关系. ...

  3. 记一次 HTTPS 抓包分析和 SNI 的思考

    日常听说 HTTPS 是加密协议,那现实中的 HTTPS 流量,是真的完全加密吗? --答案是,不一定.原因嘛,抓个包就知道了. 我们用 curl 命令触发一下: curl -v 'https://s ...

  4. Unity的IPreprocessShaders:深入解析与实用案例

    Unity IPreprocessShaders Unity IPreprocessShaders是Unity引擎中的一个非常有用的功能,它可以让开发者在编译Shader时自定义哪些操作需要被执行.这 ...

  5. 揭秘 .NET 中的 TimerQueue(下)

    前言 上文给大家介绍了 TimerQueue 的任务调度算法. https://www.cnblogs.com/eventhorizon/p/17557821.html 这边做一个简单的复习. Tim ...

  6. 应用层协议之DNS、DHCP

    运输层为应用进程提供了端对端的通信服务,但不同的网络应用的应用进程之间,还需要有不同的通信规则.因此在运输层协议之上,还需要有应用层协议. 应用层中有这些常见的协议 域名系统:DNS 动态主机配置:D ...

  7. 【go笔记】简单的http服务

    前言 Go语言通过内置的标准库net/http可以非常方便地实现web服务.不借助任何框架,单凭标准库,50行代码内即可实现简单的web服务. http的ListenAndServe()函数原型: f ...

  8. jmeter:内存溢出解决办法

    使用jmeter执行性能测试,报错:java.lang.OutOfMemoryError: Java heap space 需要对jmeter的jvm进行调优.记录如下: 1. 问题记录及分析: 使用 ...

  9. UI自动化执行过程中,隐藏浏览器页面

    在执行UI自动化的过程中,浏览器总是会弹出,如果自动化环境是在个人办公笔记本,在工作过程中会影响正常办公.故需要将UI自动化执行时的浏览器隐藏. 代码实现如下: from selenium impor ...

  10. JDK中动态库加载路径问题,一文讲清

    前言 本周协助测试同事对一套测试环境进行扩容,我们扩容很原始,就是新申请一台机器,直接把jdk.resin容器(一款servlet容器).容器中web应用所在的目录,全拷贝到新机器上,servlet容 ...