题目

字符串模拟+并查集

建立两个并查集分别存放每个变量的每一位数的祖先,一个是1一个是2

考虑每个字母的每一位的数都是唯一的,先模拟,记录每一个变量的每一位。

一一映射到方程中去,最后将两个方程进行一一比较,然后合并并查集。中间判断是否出现一位既是1又是2的情况

最后统计自由元的个数cnt,高精求解2^cnt

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #define int long long
  6. #define N 100100
  7. using namespace std;
  8. int k, tot, len, len1, len2, tot1, tot2;
  9. int x[N], y[N], sum[N], fa[N], jin[N]; //sum[i]表示i所代表的字母的开始位置
  10. string s1, s2;
  11. int find(int a)
  12. {
  13. if (a == fa[a]) return a;
  14. return fa[a] = find(fa[a]);
  15. }
  16. signed main()
  17. {
  18. scanf("%lld", &k);
  19. sum[1] = len = 2;
  20. for (int i = 2; i <= k + 1; i++)
  21. scanf("%lld", &len), sum[i] = sum[i - 1] + len, tot += len;
  22. cin >> s1 >> s2;
  23. int len1 = s1.size(), len2 = s2.size();
  24. for (int i = 0; i < len1; i++)
  25. {
  26. if (s1[i] >= 'a' && s1[i] <= 'z')
  27. {
  28. int now = s1[i] - 'a' + 1;
  29. for (int j = sum[now]; j < sum[now + 1]; j++)
  30. x[++tot1] = j;
  31. }
  32. else x[++tot1] = s1[i] - '0';
  33. }
  34. for (int i = 0; i < len2; i++)
  35. {
  36. if (s2[i] >= 'a' && s2[i] <= 'z')
  37. {
  38. int now = s2[i] - 'a' + 1;
  39. for (int j = sum[now]; j < sum[now + 1]; j++)
  40. y[++tot2] = j;
  41. }
  42. else y[++tot2] = s2[i] - '0';
  43. }
  44. if (tot1 != tot2)
  45. printf("0"), exit(0);
  46. for (int i = 1; i <= tot1 * 4; i++)
  47. fa[i] = i;
  48. for (int i = 1; i <= tot1; i++)
  49. {
  50. int a = x[i], b = y[i];
  51. if (a + b == 1) //如果a,b不相等,就直接输出不行
  52. printf("%lld\n", 0), exit(0);
  53. int da = find(a), db = find(b);
  54. if (da + db == 1)
  55. printf("0"), exit(0);
  56. if (da != db) //已经排除了a,b等于1或0的情况
  57. fa[da] = db, tot--;
  58. }
  59. int big[100010]= {1}, top=1;
  60. for(int i=tot; i>=1; i--)
  61. {
  62. for(int i=0; i<top; ++i)big[i]<<=1;
  63. for(int i=0; i<top; ++i)if(big[i]>=10)
  64. {
  65. big[i+1]+=big[i]/10,big[i]%=10;
  66. }
  67. for(; big[top]; ++top)
  68. {
  69. big[top+1]+=big[top]/10,big[top]%=10;
  70. }
  71. }
  72. for(int i=top-1; i>=0; --i) printf("%lld", big[i]);
  73. return 0;
  74. }
  75. /*
  76. 5
  77. 4 2 4 4 2
  78. 1bad1
  79. acbe
  80. */

洛谷P2456 二进制方程的更多相关文章

  1. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  2. p2456二进制方程 题解

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

  3. [NOIP2014] 提高组 洛谷P2312 解方程

    题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...

  4. 洛谷P4428二进制 [BJOI2018] 线段树

    正解:线段树 解题报告: 传送门! 话说开始看到这题的时候我想得hin简单 因为关于%3有个性质就是说一个数的各个位数之和%3=这个数%3嘛,小学基础知识? 我就想着,就直接建一棵树,只是这棵树要用个 ...

  5. 洛谷 P2312 解方程 解题报告

    P2312 解方程 题目描述 已知多项式方程: \(a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\)求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) 均为正整 ...

  6. 洛谷P1633 二进制

    P1633 二进制 题目描述 有三个整数A.B.C,以下用N(2)表示N的二进制(没有前导0). 设A(2).B(2).C(2)的最大长度为L,你需要构造三个正整数X.Y.Z,满足以下条件: (1) ...

  7. 洛谷 P2312 解方程

    题目 首先,可以确定的是这题的做法就是暴力枚举x,然后去计算方程左边与右边是否相等. 但是noip的D2T3怎么会真的这么简单呢?卡常卡的真是熟练 你需要一些优化方法. 首先可以用秦九韶公式优化一下方 ...

  8. 洛谷 P2104 二进制

    P2104 二进制 题目描述 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运算 1:将整个二进制数加 1 运算 2:将整个二进制数减 1 ...

  9. 洛谷 P2312 解方程 题解

    P2312 解方程 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 [1,m][1,m] 内的整数解(\(n\) 和 \(m\) 均为 ...

随机推荐

  1. go 学习笔记(2)go test

    Test 的写法: 每一个test文件必须import 一个"testing" test文件下的每一个test case均必须以Test开头并且符合TestXxx形式,否则go t ...

  2. JavaScript是单线程还是多线程(转)

    多线程要考虑线程之间的资源抢占,死锁,冲突之类一系列问题.JavaScript作为一门客户端脚本,貌似没有多线程的一些列问题.那么JavaScript是单线程还是多线程?通过查资料总结了JavaScr ...

  3. WebSocket简单使用

    很简单就不写太多介绍了,仅展示服务端代码!! Configure在Startup类的方法中添加WebSockets中间件 app.UseWebSockets(); 可以配置以下设置: KeepAliv ...

  4. SVN的branches、trunk、tags使用

    本文针对实际开发过程中,svn使用到的trunk.branches.tags情况进行操作模拟, 一.创建trunk.branches.tags文件夹 我们在上文的svn仓库下创建trunk.branc ...

  5. ES6- - Map与Set

    Map和Set 是 ES6 中新增的一种数据结构.Map为类似于Object的键值对结构,Set为成员唯一的类数组结构.以Map为例介绍两种数据结构的遍历方法.for...of var map = n ...

  6. 过渡属性transition

    过渡属性:使元素变化过程可见 transition: all 1s;元素所有变化过程都可见 transition: 1s;元素所有变化过程都可见 transition: 指定属性 2s 1s;指定属性 ...

  7. css设置全局变量和局部变量

    在我们使用less或者sass时常常会使用到局部变量和全局变量,其实在我们使用css做开发时也可以定义全局变量和局部 变量来简化我们的开发效率,很简单也很实用:1.设置全局变量只需要在我们的根引用的c ...

  8. UI5-技术篇-Hybrid App-2-Geolocation位置定位

    在SAP WEB IDE简单测试基于HTML5自带的定位功能,相关步骤如下: 1.VIEW代码 <mvc:View xmlns:core="sap.ui.core" xmln ...

  9. spring boot 简要常用配置

    # 激活开发环境 spring.profiles.active=dev spring.mvc.date-format=yyyy-MM-dd HH:mm:ss spring.http.encoding. ...

  10. vue项目配置Mock.js

    扯在前面 最近一直在忙跳槽的事情,博客也好久没有更新了,上次更新还是去年,不出意外的话,从今天起继续今年的博客之旅. 今天继续完善我之前的项目架构,从零开始搭建vue移动端项目到上线,有需要的同学可以 ...