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