并查集水题。维护变量的对应位的相关关系,判断不确定点(自由元)的个数即可。

代码中的p数组:p[1] 值的id, p[2~k+1]每个变量的第一位的id。

#include <bits/stdc++.h>
using namespace std;
const int N=1e4+7; int n,m,k,tot;
int p[N],fa[N],x[N],y[N]; int get(int x) {return fa[x]==x? x: fa[x]=get(fa[x]);} int main() {
p[1]=2;
scanf("%d",&k);
for(int i=2,x; i<=k+1; ++i) {
scanf("%d",&x);
p[i]=p[i-1]+x;
tot+=x;
} static char str[N];
scanf("%s",str);
for(int i=0; str[i]; ++i) {
if(isalpha(str[i])) {
int c=str[i]-'a'+1;
for(int j=p[c]; j<p[c+1]; ++j) x[++n]=j;
} else x[++n]=str[i]-'0';
}
scanf("%s",str);
for(int i=0; str[i]; ++i) {
if(isalpha(str[i])) {
int c=str[i]-'a'+1;
for(int j=p[c]; j<p[c+1]; ++j) y[++m]=j;
} else y[++m]=str[i]-'0';
} if(n!=m) {
puts("0");
return 0;
}
for(int i=1; i<N; ++i) fa[i]=i;
for(int i=1; i<=n; ++i) {
int dx=get(x[i]), dy=get(y[i]);
if(dx+dy==1) {
puts("0");
return 0;
}
if(dx!=dy) {
fa[max(dx,dy)]=min(dx,dy);
tot--;
}
} static int dig[N]={1},top=1;
while(tot--) {
for(int i=0; i<top; ++i) dig[i]<<=1;
for(int i=0; i<top; ++i) if(dig[i]>=10) {
dig[i+1]+=dig[i]/10, dig[i]%=10;
}
for(; dig[top]; ++top) {
dig[top+1]+=dig[top]/10, dig[top]%=10;
}
}
for(int i=top-1; ~i; --i) printf("%d",dig[i]);
return 0;
}

以下为输入格式:

第一行:k(k<=26,变量的个数,规定使用小写英文字母中的前k个字母作为变量,如k=5,则变量a,b,c,d,e)。

第二行:k个正整数,中间用一个空格隔开,依次代表k个变量的长度。

第三行:等式左边的表达式。

第四行:等式右边的表达式。

[SDOI2006] 二进制方程的更多相关文章

  1. P2456 [SDOI2006]二进制方程

    P2456 [SDOI2006]二进制方程 题解 拿个样例模拟一下发现 把等式两边对应展开,每个位置的填数都是一一对应的 比如第二个样例 分类讨论: (1)xi  yi  都是数字,但是不相同,此时无 ...

  2. p2456二进制方程 题解

    题面描述:可以跳过 一个形如: X1X2…Xn=Y1Y2..Ym 的等式称为二进制方程. 在二进制方程的两边:Xi和Yj (1<=i<=n:1<=j<=m)是二进制数字(0.1 ...

  3. 洛谷P2456 二进制方程

    题目 字符串模拟+并查集 建立两个并查集分别存放每个变量的每一位数的祖先,一个是1一个是2 考虑每个字母的每一位的数都是唯一的,先模拟,记录每一个变量的每一位. 一一映射到方程中去,最后将两个方程进行 ...

  4. Luogu p2456 二进制方程

    这是一道我也不知道我gu了多久的题目 (然鹅还有n多任务没有完成) 反正--我太难了 好了言归正传,题目链接 是一道校内测的题目(现在应该没有人没考了吧?) 思路的话,是神仙并查集√ 觉得虽然并查集很 ...

  5. BZOJ 3107 二进制a+b

    Description 输入三个整数\(a, b, c\),把它们写成无前导\(0\)的二进制整数.比如\(a=7, b=6, c=9\),写成二进制为\(a=111, b=110, c=1001\) ...

  6. 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...

  7. UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举

    题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台 ...

  8. 背包问题(01背包,完全背包,多重背包(朴素算法&&二进制优化))

    写在前面:我是一只蒟蒻~~~ 今天我们要讲讲动态规划中~~最最最最最~~~~简单~~的背包问题 1. 首先,我们先介绍一下  01背包 大家先看一下这道01背包的问题  题目  有m件物品和一个容量为 ...

  9. P4574 [CQOI2013]二进制A+B

    传送门 思路: 本题可用数位DP来做,设 f [ i ][ a ][ b ][ c ][ j ] 表示当前枚举到(二进制下的)第i位,a' b' c'各用a,b,c了几个1,j表示最后一位是否有进位. ...

随机推荐

  1. Linux LVM磁盘管理

    几个概念: PV:物理卷,指LVM的基本逻辑卷,包含LVM的基本参数,如/dev/sdb1等. VG:卷组,类似于非LVM的硬盘,由多个PV组成. LV:逻辑卷,类似于非LVM硬盘中的分区. PE:物 ...

  2. AltiumDesigner PCB导入CAD

    点击File菜单下的New的PCB,新建PCB文件. 在AD09中点击File菜单下的Import,导入CAD文件 选择要导入的CAD文件,点击打开. 选择单位mm,这里的单位选择要与CAD单位一致, ...

  3. 十字线阵---CBF,传统波束形成

    %传统波束形成,CBF (Ps:这个程序是别人的,不是我写的,但是具体是在哪里找到的已经忘了) clear all; close all; clc; %---------初始化常量---------- ...

  4. linux下的音量控制器alsamixer 桌面v7

    转载 http://blog.sina.com.cn/s/blog_0ca103850102vpml.html 耳机 插后边 line out 耳机插前边 模拟耳机 声卡自带工具 linux下的音量控 ...

  5. 解决安装xcode后git使用报错的问题

    一.现象: htmlxdeMacBook-Pro:demo htmlx$ git status Agreeing to the Xcode/iOS license requires admin pri ...

  6. Matplotlib 基本用法

    1.基础应用 >>> import matplotlib.pyplot as plt >>> import numpy as np #使用np.linspace定义 ...

  7. python程序编写简介

    语句和语法 # 注释 \ 转译回车,继续上一行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用 : 将两个语句连接到一行,可读性差,不建议使用 : 将代码的头和体分开 语句( ...

  8. BZOJ2212或洛谷3521 [POI2011]ROT-Tree Rotations

    BZOJ原题链接 洛谷原题链接 线段树合并裸题. 因为交换子树只会对子树内部的逆序对产生影响,所以我们计算交换前的逆序对个数和交换后的个数,取\(\min\)即可. 对每个叶子节点建一棵动态开点线段树 ...

  9. Spring MVC 中的输入验证 Vlidator

    在 Spring MVC 中有两种方式可以验证输入:1. Spring 自带的验证框架:2. 利用 JSR 303 实现,即 Java Specification Requests Converter ...

  10. JavaScript:原生模拟$.ajax以及jsonp

    现实项目中,常常会用到请求,但是在考虑低版本的浏览器时,promise相关的axios,fetch这类第三方库的支持率就不那么好了,再考虑到最大的一个问题,跨域,更是让人头痛,虽然也有fetch-js ...