提高组第二题数据已加强
查看原帖
提高组第二题数据已加强
60864
tiger2005楼主2022/3/29 16:13

rt。

gen:https://www.luogu.com.cn/paste/brhlznm4

std:https://www.luogu.com.cn/paste/vmiyd9o5

欢迎大家捉虫。

这次主要围绕构造方式和读入量进行更新。


这一次我仍然选择了对每组数据精心设计构造参数。对于 1,2,3,4,5,6,7,9 数据的第一个点,都采用了阶梯构造(其中保证数量不超过 2×1062\times10^6):

1 1
2 1 2
3 1 2 3
4 1 2 3 4
5 1 2 3 4 5
...

而其余数据采用类似于哈夫曼树的构造形式:首先初始化 N 个长度为 1 的数组,分别填入 1 到 N,每一轮从中取出若干个长度最小的组,并合并成一个大组。将过程中所有的数组放在答案序列中就可以构造出一组强数据。而对于有解的处理,我们的做法是选择一组最长的数组并随机抠出一个数字,容易知道这一定是可行的。注意:你不应当使用以上信息特化你的代码。

所有的信息已经在 gen 中提供,其中 k 是每次选择的最大数组数量,dep 是最大合并层数。在下表中列出(其中 A 指代 1,2,3,4,5,6,7,9 数据点):

kdep使用于
22A#2,8#1
23A#3,8#2
2log2(n)\lceil\log_2(n)\rceilA#4,10#1,10#2,10#3,10#4,10#5
n\sqrt n3A#5
328#3
338#4
1028#5

其次是输入量问题。根据题目的定义:

令一组数据中 m=kim=\sum k_i,则 ......1m2×1061\le m\le 2\times {10}^6

再根据题目输入格式的定义:

第一行一个正整数 TT 表示数据组数,对于每组数据: ......

可以知道 m 的范围是针对于 每组数据 而言的,而不是 一整个测试点。因此这道题目每个测试点的实际输入量级最大为 10710^7

在最后一个测试点中。每一组数据的 ki\sum k_i1768851±11768851 \pm 1,符合要求。同时,你可能需要注意读入带来的常数问题。


注意:std 会在官方数据测试通过后用来发布题解,因此一切复制上面链接中 std 的代码并提交的行为视同抄袭题解。

2022/3/29 16:13
加载中...