题目名称 229. [POI 1998] 单词等式
输入输出 row.in/out
难度等级 ★★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 12
题目来源 GravatarBYVoid 于2008-12-01加入
开放分组 全部用户
提交状态
分类标签
图论 并查集 高精度 数学
分享题解
通过:15, 提交:53, 通过率:28.3%
Gravatarlbn187 100 0.005 s 0.38 MiB C++
Gravatar1020 100 0.008 s 0.31 MiB C++
Gravatar 100 0.021 s 0.25 MiB C++
Gravatarliu_runda 100 0.027 s 0.92 MiB C++
GravatarPom 100 0.051 s 0.38 MiB C++
Gravatarskyfly 100 0.051 s 0.38 MiB C++
Gravatarswq27 100 0.052 s 0.31 MiB Pascal
Gravatarybh 100 0.054 s 0.18 MiB Pascal
Gravatarybh 100 0.054 s 0.18 MiB Pascal
GravatarBYVoid 100 0.060 s 3.50 MiB C++
关于 单词等式 的近10条评论(全部评论)
这题坑点巨多。。。
1.两个单词长度未必相等,长度相等也未必存在符合要求的答案,此时应输出0
2.某些答案的数值会非常大,所以需要写一个高精度乘法
3.多组数据,初始化要小心
Gravatarliu_runda
2016-03-30 12:19 1楼

229. [POI 1998] 单词等式

★★☆   输入文件:row.in   输出文件:row.out   简单对比
时间限制:1 s   内存限制:128 MiB

所有非空的01序列被称作一个二进制单词。一组相等的单词是如下形式的等式:x1x2..xl=y1y2..yr ,这里xi 和yj 是二进制字符01或是用小写字母表示的变量。对每一个变量都有一个固定长度的两进制单词来代替这个变量,这个长度称之为这个变量的长度。为了解决单词相等 的问题我们需要用某种方法分配给所有变量适当的二进制单词(这个二进制单词的长度必须为这个变量的长度),使得变量被取代后的等式成立。对一个给定的等式 计算有几种解答。

例子:

让a,b,c,d,e分别为长度为4,2,4,4,2的5个变量。考虑以下等式:1bad1=acbe。这个等式有16种不同的解答方案。

任务:

写一个程序:

  • 从文件中读入等式的数目以及它们的描述。
  • 对每个等式找出它们的解答方案数。
  • 将结果写入文件。

输入:

在文件的第一行有一个整数x(1<=x<=5)表示等式的数目,随后有x个等式的描述。每个描述包括6行,两个等 式的描述之间没有空行。每个等式用以下方式描述:在描述的第一行有一个整数k(0<=k<=26)表示等式中不同的变量数目,我们假设变量是 从a起的k个小写字母。第二行有k个由空格隔开的正整数,表示k个变量的长度(第一个数表示a的长度,第二个数表示b的长度)。第三行有一个整数l,表示 等式左边的长度(有0 1及变量(单个字母)组成的单词长度)。等式左边将被写在下一行,仅包括01及小写字母而没有空格。以下两行给出了对等式左边的描述,第一行为一个正整数 r,表示等式右边的长度,等式的右边被写在第二行。等式两边所有变量的和相等且不超过10000。

输出:

对每个I (1<=I<=x),你的程序必须在第I行给出第I个等式的不同解答方案数,并将它写入文件。

输入样例:

1
5
4 2 4 4 2
5
1bad1
4
acbe

输出样例:

16