1138 代码等式
时间限制:500MS 内存限制:65536K
提交次数:35 通过次数:11
题型: 编程题 语言: 无限制
描述
一个代码等式就是形如x1x2…xi=y1y2…yj,这里xi和yj是二进制的数字(0或1)或者是一个变量(如英语中的小写字母)。每一个变量都是一个有固定长度的二进制代码。例如: a,b,c,d,e是变且它们的长度分别是4,2,4,4,2。考虑等式:1bad1=acbe,这个等式共有16组解。现要求任给一个等式,计算一共有多少组解。 (变量最多26个,长度和不超过10000)
输入格式
第一行数N为变量个数; 第二行N个数,为每个变量的位数 第三行为一个等式
输出格式
输出解的个数,无解输出0
输入样例
5
4 2 4 4 2
1bad1=acbe
输出样例
16
这个题目在网上看到的是在scau1138,然而我并不能登上这个题库,所以没有写代码。不过这个题确实非常的简单。
我们要求解的个数,有人会觉得很麻烦,因为每一个字母代表的值的位数都不相同,枚举会非常的麻烦。但是我们可以将每一个长度为k的变量分为k个长度为1的变量,然后确定长度(不足时记得补零),然后将其对应位置上的变量合并,进行并查集操作,最后查询一共有多少个不相等的集合。
由于我们要求的是求出解的个数,所以我们不需要将变量还原,因为每个变量都是2进制表示,即有多少个0,1的不同组合,假设有n个不同的集合,那么解的个数应该就是2^n个。
加上无时的判断就ok了。。
然后……就没有然后了。