P2106 机密谍报
问题描述
HY 非常喜欢和 GJQ 闲聊,而其他人等都还奋斗在 OI 的道路上,为了不打扰同学,他们交流统一用密文,交流信息的明文是由0和1组成的非空序列,而密文是由0、1和若干个密码字母组成,每个 密码字母代表不同的01串,
例如,密文 011a0bf00a01。密码破译的关键是确定每个密码的含义。
经过长期统计分析,现在知道了每个密码的固定长度,如今,蛋疼的同学们又截获了它们俩的两段 密文S1 和S2 ,并且知道S1 =S2 ,即两段密文代表相同的明文。你的任务是帮助同学们对给定的两段密文进行分析,看一看有多少种可能的明文。
输入格式
第 1 行:S1 (第 1 段密文)
第 2 行:S2 (第 2 段密文)
第 3 行:N(密码总数,N ≤ 26)
第 4−N+3 行:字母 i长度i (密码用小写英文字母表示,密码长度 ≤ 100)
输出格式
M(表示有 M种可能的明文)
样例输入
100ad1
cc1
4
a 2
d 3
c 4
b 50
样例输出
2
提示
明文的长度 ≤ 10000,保证不用高精度
此题其实很水,用并查集将相同的位置合并起来,然后再把值为0的位置合并到一个集合里,值为1的位置合并到一个集合里,然后既不在0集合里也不在1集合里的集合数就是不能确定的位置数,答案就是$2^n$
但是注意判无解,如果最后0集合和1集合在一个集合里,即表示某位置既是0又是1,则无解。或者两个串长度不相同,也无解。
代码:
1 |
|