P2456 [SDOI2006]二进制方程
P2456 [SDOI2006]二进制方程
题解
拿个样例模拟一下发现
把等式两边对应展开,每个位置的填数都是一一对应的
比如第二个样例

分类讨论:
(1)xi yi 都是数字,但是不相同,此时无解
(2)xi yi 都是数字,相同,唯一填法
(3)xi yi 一个是数字,一个是字母,唯一填法
(4)xi yi 都是字母,颜色不同,那么一旦在该颜色对应的位置上填了一个数字,对应的另一种颜色,或者是该颜色在其他区域的对应位置也填上了这个数字
所以我们就把同一种颜色的方块用并查集联系起来
解释代码:
(1)num[ ] 给0,1,每一个字母每一个位置都有唯一的编号,num[ i ]记录第 i 种字母的最后一个位置在哪里,但是实际应用起来就是下表对应的亚子:


这么做是方便以后的并查集
(2)sum记录多少个待确定的位置(也就是有两种填法),答案其实是 2待确定位置数
(3)x[ ] y[ ] 记录展开后的式子
(4)判断无解,1是x[ ] y[ ]长度不一样,2是 xi yi 的祖先一个是1 一个是0
(5)取最大的一个的父亲是最小的一个
(6)高精度
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdlib>
#include<queue> using namespace std; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int num[],x[],y[],fa[],sum=,t1=,t2=,k;
char s[];
int c[],lenc; int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
} void cheng()
{
c[]*=;
for(int i=;i<lenc;i++)
{
c[i]=c[i]*+c[i-]/;
c[i-]%=;
}
while(c[lenc-]>=)
{
c[lenc]=c[lenc-]/;
c[lenc-]%=;
lenc++;
}
} int main()
{
k=read();
num[]=; //解释1
for(int i=,u;i<=k+;i++)
{
u=read();
num[i]=num[i-]+u;
sum+=u; //解释2
}
scanf("%s",s);
int len=strlen(s);
for(int i=;i<len;i++)
{
if(s[i]>='a'&&s[i]<='z')
{
int v=s[i]-'a'+;
for(int j=num[v];j<num[v+];j++) x[++t1]=j;
}
else x[++t1]=s[i]-'';
}
scanf("%s",s);
len=strlen(s);
for(int i=;i<len;i++)
{
if(s[i]>='a'&&s[i]<='z')
{
int v=s[i]-'a'+;
for(int j=num[v];j<num[v+];j++) y[++t2]=j;
}
else y[++t2]=s[i]-'';
} if(t1!=t2){ printf("0\n");return ; } //无解判断 for(int i=;i<=num[k+];i++) fa[i]=i; for(int i=;i<=t1;i++)
{
int f1=find(x[i]),f2=find(y[i]);
if(f1+f2==) { printf("0\n");return ; } //解释4
if(f1!=f2)
{
fa[max(f1,f2)]=min(f1,f2); //解释5
sum--; //少了一个可以填两种方案的
}
} c[]=;lenc=;
for(int i=sum;i>=;i--)
cheng(); //解释6
for(int i=lenc-;i>=;i--)
printf("%d",c[i]); return ;
}
P2456 [SDOI2006]二进制方程的更多相关文章
- [SDOI2006] 二进制方程
并查集水题.维护变量的对应位的相关关系,判断不确定点(自由元)的个数即可. 代码中的p数组:p[1] 值的id, p[2~k+1]每个变量的第一位的id. #include <bits/stdc ...
- p2456二进制方程 题解
题面描述:可以跳过 一个形如: X1X2…Xn=Y1Y2..Ym 的等式称为二进制方程. 在二进制方程的两边:Xi和Yj (1<=i<=n:1<=j<=m)是二进制数字(0.1 ...
- 洛谷P2456 二进制方程
题目 字符串模拟+并查集 建立两个并查集分别存放每个变量的每一位数的祖先,一个是1一个是2 考虑每个字母的每一位的数都是唯一的,先模拟,记录每一个变量的每一位. 一一映射到方程中去,最后将两个方程进行 ...
- Luogu p2456 二进制方程
这是一道我也不知道我gu了多久的题目 (然鹅还有n多任务没有完成) 反正--我太难了 好了言归正传,题目链接 是一道校内测的题目(现在应该没有人没考了吧?) 思路的话,是神仙并查集√ 觉得虽然并查集很 ...
- BZOJ 3107 二进制a+b
Description 输入三个整数\(a, b, c\),把它们写成无前导\(0\)的二进制整数.比如\(a=7, b=6, c=9\),写成二进制为\(a=111, b=110, c=1001\) ...
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...
- UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举
题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台 ...
- 背包问题(01背包,完全背包,多重背包(朴素算法&&二进制优化))
写在前面:我是一只蒟蒻~~~ 今天我们要讲讲动态规划中~~最最最最最~~~~简单~~的背包问题 1. 首先,我们先介绍一下 01背包 大家先看一下这道01背包的问题 题目 有m件物品和一个容量为 ...
- P4574 [CQOI2013]二进制A+B
传送门 思路: 本题可用数位DP来做,设 f [ i ][ a ][ b ][ c ][ j ] 表示当前枚举到(二进制下的)第i位,a' b' c'各用a,b,c了几个1,j表示最后一位是否有进位. ...
随机推荐
- C++ STL 之 list
#include <list> #include <iostream> using namespace std; // 打印list元素 void PrintList(list ...
- Python3简易接口自动化测试框架设计与实现(中)
目录 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 上一篇:Python3简易接口自动化测试框架设计与实 ...
- JavaScript 的基本使用
JavaScript 基本语法要求: 1.JS的写法是严格区分大小写的. 2.标识符的起名要求跟java的是一样的,第一个位置可以说字母.下划线.美元符号.其他位置可以字母.下划线.美元符号.数字. ...
- 将TensorFlow训练好的模型迁移到Android APP上(TensorFlowLite)
转自:https://blog.csdn.net/u012328159/article/details/81101074 https://blog.csdn.net/masa_fish/article ...
- win10家庭版设置移动热点出现“我们无法设置移动热点”
寝室wifi卡到爆炸, 买了一个360随身WiFi,可是360随身WiFi烧坏了 ...然后我就一个星期没玩游戏了 今天本来想开电脑的wifi试一试,结果发现无法设置热点 纳闷了 百度一下,发现都 ...
- Django框架orm
一.django目录 二.登录注册 三.三件套 四.orm简介 五.基于orm的用户登录 一.django目录 -settings -urls -views -强调:setting中的'django. ...
- css网页使用自定义字体方法
@font-face可以加载服务器端的字体到浏览器端,这样设计师就可以不受客户端字体库的限制. 一般来说有四种格式的字体文件即可覆盖所有浏览器.这四种格式为: .EOT:适用于Internet Exp ...
- C# 通过物理路径将文件以二进制保存到指定文件夹
/// <summary> /// 通过物理路径将文件以二进制保存到指定文件夹 /// </summary> /// <param name="filePath ...
- Java8-Stream-No.09
import java.util.Arrays; public class Streams9 { public static void main(String[] args) { Arrays.asL ...
- @WebFilter 的使用及采坑
@WebFilter@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器.该注解具有下表给出的一些常用属性 ( 以下所有属性均为 ...