Tsawke 的十二月模拟赛
Tsawke 的十二月模拟赛
题目名称 | God does not play dice with the universe | 真正的OIer从不女装 | 简单数据结构 | 什么???NP问题??? |
---|---|---|---|---|
题目类型 | 传统题 | 传统题 | 传统题 | 传统题 |
题目目录 | lets_play_dice | dress_up | dote___strvct | np_graph_isomorphism |
源程序文件名 | lets_play_dice.cpp | dress_up | dote___strvct | np_graph_isomorphism |
输入文件名 | lets_play_dice.in | dress_up.in | dote___strvct.in | np_graph_isomorphism.in |
输出文件名 | lets_play_dice.out | dress_up.out | dote___strvct.out | np_graph_isomorphism.out |
时间限制 | 1000ms | 1000ms | 2500ms | 1000ms |
内存限制 | 512MiB | 512MiB | 512MiB | 512MiB |
提交文件限制 | 100KiB | 100KiB | 100KiB | 100KiB |
数据组数 | 20 | 20 | 20 | 10 |
满分分数 | 100 | 100 | 100 | 100 |
注意事项
- 所有文件名均保证为小写(友情提示:请格外注意文件名)。
- C++ 中
main()
函数返回值必须为int
且为 $ 0 $。 - C++ 编译器开启 C++14 标准及 O2 优化。
- 提交的程序源文件需独立文件夹。
- 结果比较方式为全文比较(忽略行末空格及行尾回车)。
- 程序可使用的栈空间限制与对应题目内存限制一致。
- 评测采用机器配置为:11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz。注意:测评将在 Linux 虚拟机中进行,配置会有部分降低,对于造成影响的题目会增加部分时限。
- 编译选项为:
g++ -o sample sample.cpp -lm -Wl,--stack=2147483647 -std=c++14 -O2
。 - 对于本地 Linux 环境下调试时,可以添加编译选项:
-fsanitize=undefined,signed-integer-overflow,address
以检测未定义行为、整数溢出,地址越界等问题。 - 对于提答题请将 .out 为扩展名的文件统一放到子目录下。
Tips
tsawke 对你们的期望得分为 $ \ge 245 $。
同时部分数据尽量去卡了,可能卡的不是很好,故不保证一定会卡掉错误做法。
God does not play dice with the universe(lets_play_dice)
题目背景
既然放在了 T1 的位置,那么这道题自然是一道签到题了。
当然为了降低神仙题的难度,关键定理已在提示中给出。
题目背景之二
上帝可能不掷骰子,但是 tsawke 喜欢掷骰子。
题目描述
现在 tsawke 将会给你一个 $ m $ 面的骰子,其 $ m $ 面上标注了 $ 0, 1, 2, \cdots, m - 1 $ 共 $ m $ 个数字,每次丢出该骰子,显然会等概率生成一个 $ [0, m - 1] $ 的数字,具体地,如果我们认为骰子显示的数为 $ X $,那么离散型随机变量 $ X $ 的分布列为:
$ X $ | $ 0 $ | $ 1 $ | $ 2 $ | $ \cdots $ | $ m - 1 $ |
---|---|---|---|---|---|
$ P $ | $ \dfrac{1}{m} $ | $ \dfrac{1}{m} $ | $ \dfrac{1}{m} $ | $ \cdots $ | $ \dfrac{1}{m} $ |
初次之外,tsawke 还为你提供了两个额外性质:
- $ X $ 的一阶原点矩(期望)为 $ E(X) = \sum_{i = 0}^{m - 1}i \times P(X = i) = \dfrac{m - 1}{2} $。
- $ X $ 的二阶中心矩(方差)为 $ D(X) = E((X - E(X))^2) = \sum_{i = 0}^{m - 1}(i - E(X))^2 \times P(X = i) = \dfrac{m^2 - 1}{12} $。
现在 tsawke 会分别丢 $ n $ 次该骰子,记第 $ i $ 次骰子显示的数为 $ X_i $,tsawke 会进行 $ 10 $ 次独立询问,分别给定 $ A, B $,求 $ \sum_{i = 1}^n X_i \in [A, B] $ 的概率。
存在多组数据。
输入格式
第一行一个正整数 $ T $,表示测试数据组数。
对于每组测试数据:
第一行两个整数 $ m, n $。
接下来 $ 10 $ 行每行两个整数 $ A, B $。
输出格式
对于每组数据,输出 $ 10 $ 行,每行输出一个实数表示对应询问的答案,要求绝对误差不超过 $ 1e-2 $。
数据范围
对于 $ 100% $ 的数据,保证 $ T \le 10, 2 \le m \le 20, 1 \le n \le 2 \times 10^5, 0 \le A \le B \le (m - 1)n $。保证 $ n \gt 800 $ 的数据不超过 $ 2 $ 组。
对于具体的数据范围与约定:
测试点编号 | $ m $ | $ n $ | 特殊限制 |
---|---|---|---|
$ 1 $ | $ \le 20 $ | $ \le 40 $ | $ m^n \le 10^7 $ |
$ 2, 3, 4 $ | $ \le 20 $ | $ \le 1.6 \times 10^3 $ | \ |
$ 5, 6, 7, 8, 9, 10 $ | $ \le 20 $ | $ \le 8 \times 10^3 $ | \ |
$ 11, 12 $ | $ = 2 $ | $ \le 2 \times 10^5 $ | \ |
$ 13, 14, 15, 16, 17, 18, 19, 20 $ | $ \le 20 $ | $ \le 2 \times 10^5 $ | \ |
Examples
Input_1
1 2 19 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9
Output_1
0.000002 0.000038 0.000364 0.002213 0.009605 0.031784 0.083534 0.179642 0.323803 0.500000
Examples_2
见下发文件中 /lets_play_dice/*
。
提示
tsawke 觉得这道题有一些用到的性质似乎比较冷门,所以作为一个良心出题人,tsawke 为你们提供了几个可能用得到的定理。
对于期望为 $ \mu $,方差为 $ \sigma^2 $ 的正态分布 $ N(\mu, \sigma^2) $,其概率密度函数为:
对于 $ n $ 个独立同分布的随机变量 $ X_1, X_2, \cdots, X_n $,若 $ E(X_i) = \mu, D(X_i) = \sigma^2 $,令:
若 $ n $ 足够大,则我们认为 $ Y_n \sim N(0, 1) $。
真正的OIer从不女装(dress_up)
题目背景
众所周知,女装只有零次和无数次。
题目描述
给定序列 $ a_n $。
存在如下定义:若一个序列中所有数字均相同,那么我们称该序列为 "tsawke序列"。
对于每次的询问会给定 $ l, r $,求序列 $ a_n $ 中左右端点都在 $ [l, r] $ 中的最长的 "tsawke序列" 的长度。
直接这么问就太单调了,所以 tsawke 决定进行操作——“女装”,定义每次女装操作可以在询问区间 $ [l, r] $ 中任意挑选一个位置 $ p $,然后分别翻转区间 $ [l, p] $ 和 $ (p, r] $。
给定 $ m $ 个操作,有如下两种格式:
R l r x
:将序列中 $ [l, r] $ 区间推平为 $ x $。
Q l r k
:独立查询在区间 $ [l, r] $ 中进行最多 $ k $ 次女装操作(可以不做或做少于 $ k $ 次)后可能得到的最长 "tsawke序列" 长度。
Tips:再次提醒,询问独立。
输入格式
第一行两个整数 $ n, m $。
第二行 $ n $ 个整数表示序列 $ a_n $。
接下来 $ m $ 行按照格式给定操作。
输出格式
对于每次 $ Q $ 操作,输出对应的答案。
数据范围
对于 $ 20% $ 的数据,满足 $ 1 \le n, m \le 100 $。
对于另外 $ 10% $ 的数据,保证所有询问中 $ k = 0 $。
对于另外 $ 10% $ 的数据,不存在 $ R $ 操作。
对于 $ 100% $ 的数据,满足 $ 1 \le n, m \le 2 \times 10^5, 0 \le k \le 10^3, 1 \le a_i, x \le 10^9, 1 \le l \le r \le n $。
特别地,对于后 $ 80% $ 的数据,保证数据不随机。
Examples
Input_1
10 4 3 3 3 3 2 3 3 3 2 2 Q 1 6 1 Q 1 6 0 R 8 8 2 Q 5 10 1
Output_1
5 4 4
Examples_2
见下发文件中 /dress_up/*
。
提示
对于样例的说明:
对于第一次询问,询问的区间为:
3 3 3 3 2 3
女装1次,将区间\([1,4]\)和\([5,6]\)分别翻转,得到:
3 3 3 3 3 2
此时可得到最长 “tsawke序列”,长度为5。可以证明没有别的女装方法能得到更长的 “tsawke序列”。
此后询问以此类推。
同时提供读入优化模板:
template < typename T = int >
inline T read(void){
T ret(0);
int flag(1);
char c = getchar();
while(c != '-' && !isdigit(c))c = getchar();
if(c == '-')flag = -1, c = getchar();
while(isdigit(c)){
ret *= 10;
ret += int(c - '0');
c = getchar();
}
ret *= flag;
return ret;
}
简单数据结构(dote___strvct)
题目背景
这道题需要抓紧时间嗷!
题目描述
给定序列 $ a_n $,及 $ m $ 个操作,以以下格式给出:
1 l r
:输出 $ (\sum_{i = l}^r a_i) \bmod{1e9 + 7} $。2 l r v
:区间推平 $ [l, r] $ 为 $ v $。3 l r v
:对区间 $ [l, r] $ 加 $ v $。4 l1 r1 l2 r2
:将 $ [l_1, r_1] $ 的序列复制并覆盖到 $ [l_2, r_2] $。5 l1 r1 l2 r2
:将 $ [l_1, r_1] $ 的序列与 $ [l_2, r_2] $ 的序列交换。6 l r
:翻转区间 $ [l, r] $ 的序列。
输入格式
第一行两个整数 $ n, m $。
第二行 $ n $ 个整数表示序列 $ a_n $。
接着 $ m $ 行描述 $ m $ 个操作。
输出格式
对于每个操作 $ 1 $ 输出一行一个答案。
最后一行输出操作后的序列 $ a_n $。
数据范围
对于 $ 10% $ 的数据,满足 $ n, m \le 10^3 $。
对于 $ 20% $ 的数据,满足 $ n, m \le 5 \times 10^4 $。
对于 $ 30% $ 的数据,满足 $ n, m \le 1.5 \times 10^5 $。
对于另外 $ 20% $ 的数据,满足不存在操作 $ 4 $。
对于 $ 100% $ 的数据,满足 $ n, m \le 3 \times 10^5, 0 \le a_i, v \le 10^9 + 7 $,且数据完全随机。
对于复制和交换操作,保证两区间长度相同且无交。
Examples
Input_1
10 10 7 1 3 2 2 4 0 1 2 2 4 10 10 3 3 3 4 10 5 6 6 7 6 9 10 1 10 10 5 9 10 6 7 2 8 10 0 5 4 4 5 5 5 2 4 8 10 3 3 9 0
Output_1
7 7 0 0 0 7 7 7 1 2 7
Examples_2
见下发文件中 /dote___strvct/*
。
提示
本题方法不局限于一种。
什么???NP问题???(np_graph_isomorphism)
题目背景
首先先放一段原题中对于 NP 和 NPC 等问题的叙述。
当学生们遇到某个难题时经常会说“这怎么做,这不是 NP 问题吗?”、“这个只有搜了,这己经被证明是 NP 问题了”。但是,你应该淸楚,大多数人此时所说的NP问题其实都是指 NPC 问题。很多人没有真正掌握 NP 问题和 NPC 问题这两个基本概念。其实 NP 问题并不是那种“只有搜才行”的问题,NPC 问题才是。
很久以前就有一个古老的传说:有―个著名的问题,即P是否等于NP的问题,传说中谁要是证明或者证伪了这个命题,他将获得幸福。这里P是指能在多项式时间里求解的问题的集合。而NP是指可在多项式时间里验证的问题的集合。显然P是NP的子集,因为能在多项式时间里求解的问题,必定可在多项式时间里验证。
到目前为止还没有人因这个命题得到幸福。但是,有一个总的趋势,也就是人们普遍认为,\(P=NP\) 不成立,即,多数人相信,至少存在一个不可能有多项式时间复杂度的求解算法的NP问题。人们如此坚信 \(P \neq NP\) 是有原因的,因为在研究NP问题的过程中找出了一类非常特殊的NP问题叫做NP-完全问题,也就是所谓的NPC问题。正是因为存在NPC问题,才使人们相信 \(P \neq NP\)。
在提出NPC的概念之后,绝大多数“自然”的难题最后都被证明是NPC问题,只有三个例外,它们分别是:
- 线形规划问题;
- 图同构问题;
- 素数判定问题与大数分解问题。
题目背景之二
虽然图的同构显然是一个 NP 问题,但是 tsawke 还是希望你能够以更优越的复杂度帮他解决这个问题。
题目描述
首先给定一下图的同构的定义:若将 $ A $ 图的顶点经过重新标号后可以使得 $ A $ 图和 $ B $ 图的顶点集和边集一一对应,那么称 $ A $ 图和 $ B $ 图是同构的。
现在你获得了一个不大的整数 $ n $,对于所有的含有 $ n $ 个点的简单无向图,显然其最多有 $ 2^{n \choose 2} $ 条边,你需要输出这些所有图中,有多少种本质不同图。
换句话说,同构的图算作一种,你需要计算有多少种不同的图。
答案对 $ p $ 取模,已知 $ p $ 为质数。
输入格式
一行两个非负整数 $ n, p $,表示图的顶点数和模数。
输出格式
一行一个整数,表示本质不同的图的数量,对 $ p $ 取模。
数据范围
对于 $ 20% $ 的数据,满足 $ 1 \le n \le 5 $。(这是给你们手画的部分分)
对于 $ 40% $ 的数据,满足 $ 1 \le n \le 10 $。(这部分分给的挺足了)
对于 $ 100% $ 的数据,满足 $ 1 \le n \le 60, p \gt n $,且保证 $ p $ 为质数。
Examples
Input_1
1 1145141
Output_1
1
Input_2
3 1145141
Output_2
4
Examples_3
见下发文件中 /np_graph_isomorphism/*
。