本来开了某场远古 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. Android实时获取摄像头画面传输至PC端

    前言 最近在做一个PC端小应用,需要获取摄像头画面,但是电脑摄像头像素太低,而且位置调整不方便,又不想为此单独买个摄像头.于是想起了之前淘汰掉的手机,成像质量还是杠杠的,能不能把手机摄像头连接到电脑上 ...

  2. 国内可用的GPT4镜像站

    我做了个镜像站,GPT4的费用目前太贵了. 虽然做了个低价的月费,但基本上亏本在做,接口的实际费用高出太多. 运行了1个月,每天有几十人在用吧. 有兴趣的可以收藏一下 GPT4的验明正身的问题&quo ...

  3. java学习中的一些总结

    最近java要考试了,在复习的时候就发现什么成员变量,成员函数,静态,非静态,里面的一些东西都乱七八糟的(其实是我太菜了,没有理解透彻) 我查了很多相关的资料,网上很多大佬总结的非常好 知识点一 成员 ...

  4. KVM 虚拟机 热插拔硬盘

    新建硬盘 lvm 命令 lvcreate -L 200G -n lv02 ssd01 qemu-img 命令 qemu-img create -f raw test1G.raw 1G dd 命令 dd ...

  5. 【JMeter】JMeter添加插件

    JMeter添加插件 目录 JMeter添加插件 一.前言 二.插件管理器 三.推荐插件 1.Custom Thread Groups (1)Ultmate Thread Group (2)Stepp ...

  6. Python sorted() 函数和sort()函数对比分析

    Python sorted() 函数 一.概述 sorted()函数是对所有可迭代的对象进行排序操作. sort与sorted的区别: sort是应用在list上的方法,sorted可以对所有可迭代的 ...

  7. 关于python pycharm中输出的内容不全的解决办法

    import pandas as pd #设置显示的最大列.宽等参数,消除打印不完全中间的省略号 pd.set_option("display.width",1000) #加了这一 ...

  8. 记一次 .NET 某物流API系统 CPU爆高分析

    一:背景 1. 讲故事 前段时间有位朋友找到我,说他程序CPU直接被打满了,让我帮忙看下怎么回事,截图如下: 看了下是两个相同的程序,既然被打满了那就抓一个 dump 看看到底咋回事. 二:为什么会打 ...

  9. [论文阅读] 颜色迁移-Illuminant Aware Gamut-Based

    [论文阅读] 颜色迁移-Illuminant Aware Gamut-Based 文章: [Illuminant Aware Gamut-Based Color Transfer], [python代 ...

  10. nlp入门(二) :商品信息可视化与文本分析实战

    源码请到:自然语言处理练习: 学习自然语言处理时候写的一些代码 (gitee.com) 数据来源:麦卡里价格建议挑战Mercari Price Suggestion Challenge | Kaggl ...