题目名称 | 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 会分别丢
存在多组数据。
第一行一个正整数
对于每组测试数据:
第一行两个整数
接下来
对于每组数据,输出
对于
对于具体的数据范围与约定:
测试点编号 | 特殊限制 | ||
---|---|---|---|
\ | |||
\ | |||
\ | |||
\ |
xxxxxxxxxx
1211
22 19
30 0
40 1
50 2
60 3
70 4
80 5
90 6
100 7
110 8
120 9
xxxxxxxxxx
1010.000002
20.000038
30.000364
40.002213
50.009605
60.031784
70.083534
80.179642
90.323803
100.500000
见下发文件中 /lets_play_dice/*
。
tsawke 觉得这道题有一些用到的性质似乎比较冷门,所以作为一个良心出题人,tsawke 为你们提供了几个可能用得到的定理。
对于期望为
对于
若
众所周知,女装只有零次和无数次。
给定序列
存在如下定义:若一个序列中所有数字均相同,那么我们称该序列为 "tsawke序列"。
对于每次的询问会给定
直接这么问就太单调了,所以 tsawke 决定进行操作——“女装”,定义每次女装操作可以在询问区间
给定
R l r x
:将序列中
Q l r k
:独立查询在区间
Tips:再次提醒,询问独立。
第一行两个整数
第二行
接下来
对于每次
对于
对于另外
对于另外
对于
特别地,对于后
xxxxxxxxxx
6110 4
23 3 3 3 2 3 3 3 2 2
3Q 1 6 1
4Q 1 6 0
5R 8 8 2
6Q 5 10 1
xxxxxxxxxx
315
24
34
见下发文件中 /dress_up/*
。
对于样例的说明:
对于第一次询问,询问的区间为:
3 3 3 3 2 3
女装1次,将区间
3 3 3 3 3 2
此时可得到最长 “tsawke序列”,长度为5。可以证明没有别的女装方法能得到更长的 “tsawke序列”。
此后询问以此类推。
同时提供读入优化模板:
xxxxxxxxxx
151template < 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
:翻转区间 第一行两个整数
第二行
接着
对于每个操作
最后一行输出操作后的序列
对于
对于
对于
对于另外
对于
对于复制和交换操作,保证两区间长度相同且无交。
xxxxxxxxxx
12110 10
27 1 3 2 2 4 0 1 2 2
34 10 10 3 3
43 4 10 5
56 6 7
66 9 10
71 10 10
85 9 10 6 7
92 8 10 0
105 4 4 5 5
115 2 4 8 10
123 3 9 0
xxxxxxxxxx
217
27 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 还是希望你能够以更优越的复杂度帮他解决这个问题。
首先给定一下图的同构的定义:若将
现在你获得了一个不大的整数
换句话说,同构的图算作一种,你需要计算有多少种不同的图。
答案对
一行两个非负整数
一行一个整数,表示本质不同的图的数量,对
对于
对于
对于
xxxxxxxxxx
111 1145141
xxxxxxxxxx
111
xxxxxxxxxx
113 1145141
xxxxxxxxxx
114
见下发文件中 /np_graph_isomorphism/*
。