| 题目名称 | 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 |
main() 函数返回值必须为 int 且为 g++ -o sample sample.cpp -lm -Wl,--stack=2147483647 -std=c++14 -O2。-fsanitize=undefined,signed-integer-overflow,address 以检测未定义行为、整数溢出,地址越界等问题。tsawke 对你们的期望得分为
同时部分数据尽量去卡了,可能卡的不是很好,故不保证一定会卡掉错误做法。
既然放在了 T1 的位置,那么这道题自然是一道签到题了。
当然为了降低神仙题的难度,关键定理已在提示中给出。
上帝可能不掷骰子,但是 tsawke 喜欢掷骰子。
现在 tsawke 将会给你一个
初次之外,tsawke 还为你提供了两个额外性质:
现在 tsawke 会分别丢
存在多组数据。
第一行一个正整数
对于每组测试数据:
第一行两个整数
接下来
对于每组数据,输出
对于
对于具体的数据范围与约定:
| 测试点编号 | 特殊限制 | ||
|---|---|---|---|
| \ | |||
| \ | |||
| \ | |||
| \ |
xxxxxxxxxx121122 1930 040 150 260 370 480 590 6100 7110 8120 9
xxxxxxxxxx1010.00000220.00003830.00036440.00221350.00960560.03178470.08353480.17964290.323803100.500000
见下发文件中 /lets_play_dice/*。
tsawke 觉得这道题有一些用到的性质似乎比较冷门,所以作为一个良心出题人,tsawke 为你们提供了几个可能用得到的定理。
对于期望为
对于
若
众所周知,女装只有零次和无数次。
给定序列
存在如下定义:若一个序列中所有数字均相同,那么我们称该序列为 "tsawke序列"。
对于每次的询问会给定
直接这么问就太单调了,所以 tsawke 决定进行操作——“女装”,定义每次女装操作可以在询问区间
给定
R l r x:将序列中
Q l r k:独立查询在区间
Tips:再次提醒,询问独立。
第一行两个整数
第二行
接下来
对于每次
对于
对于另外
对于另外
对于
特别地,对于后
xxxxxxxxxx6110 423 3 3 3 2 3 3 3 2 23Q 1 6 14Q 1 6 05R 8 8 26Q 5 10 1
xxxxxxxxxx3152434
见下发文件中 /dress_up/*。
对于样例的说明:
对于第一次询问,询问的区间为:
3 3 3 3 2 3
女装1次,将区间
3 3 3 3 3 2
此时可得到最长 “tsawke序列”,长度为5。可以证明没有别的女装方法能得到更长的 “tsawke序列”。
此后询问以此类推。
同时提供读入优化模板:
xxxxxxxxxx151template < typename T = int >2inline T read(void){3 T ret(0);4 int flag(1);5 char c = getchar();6 while(c != '-' && !isdigit(c))c = getchar();7 if(c == '-')flag = -1, c = getchar();8 while(isdigit(c)){9 ret *= 10;10 ret += int(c - '0');11 c = getchar();12 }13 ret *= flag;14 return ret;15}
这道题需要抓紧时间嗷!
给定序列
1 l r:输出 2 l r v:区间推平 3 l r v:对区间 4 l1 r1 l2 r2:将 5 l1 r1 l2 r2:将 6 l r:翻转区间 第一行两个整数
第二行
接着
对于每个操作
最后一行输出操作后的序列
对于
对于
对于
对于另外
对于
对于复制和交换操作,保证两区间长度相同且无交。
xxxxxxxxxx12110 1027 1 3 2 2 4 0 1 2 234 10 10 3 343 4 10 556 6 766 9 1071 10 1085 9 10 6 792 8 10 0105 4 4 5 5115 2 4 8 10123 3 9 0
xxxxxxxxxx21727 0 0 0 7 7 7 1 2 7
见下发文件中 /dote___strvct/*。
本题方法不局限于一种。
首先先放一段原题中对于 NP 和 NPC 等问题的叙述。
当学生们遇到某个难题时经常会说“这怎么做,这不是 NP 问题吗?”、“这个只有搜了,这己经被证明是 NP 问题了”。但是,你应该淸楚,大多数人此时所说的NP问题其实都是指 NPC 问题。很多人没有真正掌握 NP 问题和 NPC 问题这两个基本概念。其实 NP 问题并不是那种“只有搜才行”的问题,NPC 问题才是。
很久以前就有一个古老的传说:有―个著名的问题,即P是否等于NP的问题,传说中谁要是证明或者证伪了这个命题,他将获得幸福。这里P是指能在多项式时间里求解的问题的集合。而NP是指可在多项式时间里验证的问题的集合。显然P是NP的子集,因为能在多项式时间里求解的问题,必定可在多项式时间里验证。
到目前为止还没有人因这个命题得到幸福。但是,有一个总的趋势,也就是人们普遍认为,
在提出NPC的概念之后,绝大多数“自然”的难题最后都被证明是NPC问题,只有三个例外,它们分别是:
虽然图的同构显然是一个 NP 问题,但是 tsawke 还是希望你能够以更优越的复杂度帮他解决这个问题。
首先给定一下图的同构的定义:若将
现在你获得了一个不大的整数
换句话说,同构的图算作一种,你需要计算有多少种不同的图。
答案对
一行两个非负整数
一行一个整数,表示本质不同的图的数量,对
对于
对于
对于
xxxxxxxxxx111 1145141
xxxxxxxxxx111
xxxxxxxxxx113 1145141
xxxxxxxxxx114
见下发文件中 /np_graph_isomorphism/*。