#270. #2261. 「CTSC2017」密钥

#2261. 「CTSC2017」密钥

说明

一个密钥是一个长度为 n=2k+1n = 2k + 1n=2k+1 的字符串,它包含 111 个字母 XXXkkk 个字母 AAAkkk 个字母 BBB。例如 k=3k = 3k=3 时,BAXABABBAXABABBAXABAB 就是一个密钥。
如下图所示,可以按顺时针顺序把这 2k+12k+12k+1 个字母排成一个圈:

BAXABAB

kkk 个字母 AAA 中,有一部分可以定义为「强的」。具体来说,从 XXX 出发顺时针走到某个 AAA 时,如果途中 AAA 的数目严格多于 BBB 的数目,则称此字母 AAA 为强的。
对于上面的例子来说,顺时针方向从字母 XXX 数起第 111 个和第 222 个字母 AAA 是强的,而第 333 个字母 AAA 不是强的。
一个密钥的特征值就是其中包含的强的字母 AAA 的个数。

天才小朋友 KT 给出了一个结论:
假设 kkk 个字母 AAA 所在的位置已经固定,但是剩下的 kkkBBB111XXX 的位置是未知的。(注意,满足这样要求的密钥一共有 k+1k + 1k+1 个,因为字母 XXX 还剩下 k+1k + 1k+1 个可能的位置。)
可以证明:所有这 k+1k + 1k+1 个可能的密钥的特征值是各不相同的,它们恰好为 0,1,2,...,k0,1,2,...,k0,1,2,...,k
下页的图是一个具体的示例,从左到右的四个子图中分别有 333 个,222 个,111 个,000 个字母 AAA 是强的。

类似地,如果固定 kkk 个字母 BBB 的位置,那满足条件的所有 k+1k + 1k+1 个密钥的特征值也各不相同,恰好为 0,1,...,k0,1,...,k0,1,...,k

现在你需要解决以下三个问题:

  1. 给定密钥中所有 AAA 的位置,当密钥的特征值为 000 时,请问 XXX 在哪个位置。
  2. 给定密钥中所有 AAA 的位置,当密钥的特征值为 SSS 时,请问 XXX 在哪个位置。
  3. 给定密钥中所有 BBB 的位置,当密钥的特征值为 SSS 时,请问 XXX 在哪个位置。

注意:字符串的 2k+12k + 12k+1 个字母的位置由 1112k+12k + 12k+1 编号。

例子 1

假定 k=3,S=2k = 3,S = 2k=3,S=2。那么:
AAA 的位置是 {2,4,6}\{2,4,6\}{2,4,6} 且特征值为 000 时,XXX 的位置在 777
AAA 的位置是 {2,4,6}\{2,4,6\}{2,4,6} 且特征值为 222 时,XXX 的位置在 333
BBB 的位置是 {2,4,6}\{2,4,6\}{2,4,6} 且特征值为 222 时,XXX 的位置在 555

例子 2

假定 k=9,S=7k=9,S=7k=9,S=7。那么:
AAA 的位置是 {3,4,5,9,10,12,13,16,19}\{3,4,5,9,10,12,13,16,19\}{3,4,5,9,10,12,13,16,19} 且特征值为 000 时,XXX 的位置在 141414
AAA 的位置是 {3,4,5,9,10,12,13,16,19}\{3,4,5,9,10,12,13,16,19\}{3,4,5,9,10,12,13,16,19} 且特征值为 777 时,XXX 的位置在 181818
BBB 的位置是 {3,4,5,9,10,12,13,16,19}\{3,4,5,9,10,12,13,16,19\}{3,4,5,9,10,12,13,16,19} 且特征值为 777 时,XXX 的位置在 171717

</div> </div>

输入格式

只包含一组测试数据。
第一行包含一个整数 kkk ,意义如题所述。
第二行包含一个整数 seed\text{seed}seed ,这个数将用于生成一个 kkk 元集合 PPP
第三行包含一个整数 SSS,意义如题所述。
保证 0≤S≤k≤107,1≤seed≤100000\leq S\leq k \leq 10^7,1\leq \text{seed} \leq 100000Sk107,1seed10000
提供了三个用于生成输入数据的文件 cipher.cpp/c/pas。其中读入部分已经完成,在数组 p[]p[]p[] 中,若 p[i]=0p[i] = 0p[i]=0 ,表示 iii 不属于集合 PPP,否则,iii 属于集合 PPP

输出格式

输出三行,每行一个数,依次对应问题描述中的三个子问题的答案。 即:

  1. 第一个数表示当 kkk 元集合 PPP 代表 AAA 的位置且特征值为 000XXX 的位置。
  2. 第二个数表示当 kkk 元集合 PPP 代表 AAA 的位置且特征值为 SSSXXX 的位置。
  3. 第三个数表示当 kkk 元集合 PPP 代表 BBB 的位置且特征值为 SSSXXX 的位置。

样例

样例输入 1

5
3344
2

样例输出 1

10
1
2

样例解释 1

第一个样例中,PPP 数组为 111 的元素的下标分别为 5,6,7,8,95,6,7,8,95,6,7,8,9

样例输入 2

500000
4545
234567

样例输出 2

999992
246922
753067

数据范围与提示

对于 30%30\%30% 的数据,k≤103k\leq 10^3k103
对于 50%50\%50% 的数据,k≤105k\leq 10^5k105
对于 100%100\%100% 的数据,k≤107k\leq 10^7k107

对于每个测试点,得分为以下三部分得分之和:

  1. 如果第一问回答正确,你将获得 333 分。
  2. 如果第二问回答正确,你将获得 444 分。
  3. 如果第三问回答正确,你将获得 333 分。

如果你仅仅知道部分答案,请也务必按此格式要求输出三个数,否则你可能会因格式错误无法得分。