《算法艺术与信息学竞赛》之 并查集 scau1138 代码等式

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了。。
然后……就没有然后了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值