题目背景
zhoutb2333学习了哈希算法,他于是去统计给定一些字符串,其中有多少个本质不同的字符串。
但是zhoutb2333突发奇想,如果哈希采用的base每次随机,那么结果会变成什么样呢?
辣鸡出题人又出锅了!subtask3的数据有问题,现在统一将模数改为65537
题目来源:zhoutb2333
题目描述
他通过某种办法,获得了一个函数:int Rand(int x),它会等概率地返回一个[0,x)中的整数。
他写下了这样的代码:
zhoutb2333想问你,给定一些字符串和参数x,答案ans的期望是多少呢?
65537=216+1是质数
参数x在这个程序中是确定的10,但是每次输入会给定。
输入格式
第一行三个整数x,N,表示base生成的参数和字符串的个数
接下来N行每行一个字符串,字符串仅由小写字母组成。
输出格式
一行一个小数,表示答案ans的期望,模65537输出。
即:如果你的答案为pq(gcd(p,q)=1),那么输出使得px≡q (mod 65537的最小正整数x。可以证明答案ans一定为正有理数,并且这样的x一定存在。
提示
本题由3个subtask组成,设M为这N个字符串中,每个字符串长度的最大值。
对于subtask 1:1≤N≤8,M≤10,x≤4,分值为20,时间限制为1s。
对于subtask 2:1≤N≤30,M≤500,x≤500,分值为50,时间限制为1s。
对于subtask 3:1≤N≤5,M≤16000,x≤16000,分值为30,时间限制为4.5s。
样例#1解释:
参数x=2,那么可能的哈希base为0,1。
如果哈希第一个aa
采用的base和第二个aa
的base相同,那么答案为1。
如果两个base不相同,那么答案为2。
分析发现这两种情况发生的概率相同,都是21,那么答案ans的期望为1∗21+2∗21=23。使得2x≡3 (mod 65537)的最小正整数x为32770。
样例#2解释:
求得答案为953。使得9x≡53 (mod 65537)的最小正整数x为58261。
注意:本题允许手动开O2优化以避免被卡常数,方法如下: