loj#P2261. 「CTSC2017」密钥
「CTSC2017」密钥
题目描述
一个密钥是一个长度为 的字符串,它包含 个字母 、 个字母 和 个字母 。例如 时, 就是一个密钥。
如下图所示,可以按顺时针顺序把这 个字母排成一个圈:
在 个字母 中,有一部分可以定义为「强的」。具体来说,从 出发顺时针走到某个 时,如果途中 的数目严格多于 的数目,则称此字母 为强的。
对于上面的例子来说,顺时针方向从字母 数起第 个和第 个字母 是强的,而第 个字母 不是强的。
一个密钥的特征值就是其中包含的强的字母 的个数。
天才小朋友 KT 给出了一个结论:
假设 个字母 所在的位置已经固定,但是剩下的 个 和 个 的位置是未知的。(注意,满足这样要求的密钥一共有 个,因为字母 还剩下 个可能的位置。)
可以证明:所有这 个可能的密钥的特征值是各不相同的,它们恰好为 。
下页的图是一个具体的示例,从左到右的四个子图中分别有 个, 个, 个, 个字母 是强的。
类似地,如果固定 个字母 的位置,那满足条件的所有 个密钥的特征值也各不相同,恰好为 。
现在你需要解决以下三个问题:
- 给定密钥中所有 的位置,当密钥的特征值为 时,请问 在哪个位置。
- 给定密钥中所有 的位置,当密钥的特征值为 时,请问 在哪个位置。
- 给定密钥中所有 的位置,当密钥的特征值为 时,请问 在哪个位置。
注意:字符串的 个字母的位置由 到 编号。
例子 1
假定 。那么:
当 的位置是 且特征值为 时, 的位置在 ;
当 的位置是 且特征值为 时, 的位置在 ;
当 的位置是 且特征值为 时, 的位置在 。
例子 2
假定 。那么:
当 的位置是 且特征值为 时, 的位置在 ;
当 的位置是 且特征值为 时, 的位置在 ;
当 的位置是 且特征值为 时, 的位置在 。
输入格式
只包含一组测试数据。
第一行包含一个整数 ,意义如题所述。
第二行包含一个整数 ,这个数将用于生成一个 元集合 。
第三行包含一个整数 ,意义如题所述。
保证 $0\leq S\leq k \leq 10^7,1\leq \text{seed} \leq 10000$。
提供了三个用于生成输入数据的文件 cipher.cpp/c/pas
。其中读入部分已经完成,在数组 中,若 ,表示 不属于集合 ,否则, 属于集合 。
输出格式
输出三行,每行一个数,依次对应问题描述中的三个子问题的答案。 即:
- 第一个数表示当 元集合 代表 的位置且特征值为 时 的位置。
- 第二个数表示当 元集合 代表 的位置且特征值为 时 的位置。
- 第三个数表示当 元集合 代表 的位置且特征值为 时 的位置。
5
3344
2
10
1
2
500000
4545
234567
999992
246922
753067
数据范围与提示
对于 的数据,。
对于 的数据,。
对于 的数据,。
对于每个测试点,得分为以下三部分得分之和:
- 如果第一问回答正确,你将获得 分。
- 如果第二问回答正确,你将获得 分。
- 如果第三问回答正确,你将获得 分。
如果你仅仅知道部分答案,请也务必按此格式要求输出三个数,否则你可能会因格式错误无法得分。