Luogu p2456 二进制方程】的更多相关文章

这是一道我也不知道我gu了多久的题目 (然鹅还有n多任务没有完成) 反正--我太难了 好了言归正传,题目链接 是一道校内测的题目(现在应该没有人没考了吧?) 思路的话,是神仙并查集√ 觉得虽然并查集很简单,但很容易想不到要用并查集解题呢 首先,考场上卡死我的就是怎么分别表示\(a_1,a_2--,a_n\),然后其实我们可以直接按照\(a_1,a_2,--,a_n,b_1,b_2,--b_n,--\)的顺序依次编号(注意并查集时需要考虑0和1,所以需要从2开始编号). k=read(); num…
题面描述:可以跳过 一个形如: X1X2…Xn=Y1Y2..Ym 的等式称为二进制方程. 在二进制方程的两边:Xi和Yj (1<=i<=n:1<=j<=m)是二进制数字(0.1)或者一个变量(小写字母).每个变量都是一个有固定长度的二进制代码,他可以在等式中取代变量的位置,称这个长度为变量的长度.为了解一个二进制方程,需要给其中的变量赋予适当的二进制代码,使得我们用他们替代等式中的相应的变量后(等式的两边都变成二进制代码),这个等式成立. 编程任务: 对于每一个给出的方程,计算一共…
题目 字符串模拟+并查集 建立两个并查集分别存放每个变量的每一位数的祖先,一个是1一个是2 考虑每个字母的每一位的数都是唯一的,先模拟,记录每一个变量的每一位. 一一映射到方程中去,最后将两个方程进行一一比较,然后合并并查集.中间判断是否出现一位既是1又是2的情况 最后统计自由元的个数cnt,高精求解2^cnt #include <iostream> #include <cstdio> #include <algorithm> #include <cstring&…
P2456 [SDOI2006]二进制方程 题解 拿个样例模拟一下发现 把等式两边对应展开,每个位置的填数都是一一对应的 比如第二个样例 分类讨论: (1)xi  yi  都是数字,但是不相同,此时无解 (2)xi  yi  都是数字,相同,唯一填法 (3)xi  yi  一个是数字,一个是字母,唯一填法 (4)xi  yi  都是字母,颜色不同,那么一旦在该颜色对应的位置上填了一个数字,对应的另一种颜色,或者是该颜色在其他区域的对应位置也填上了这个数字 所以我们就把同一种颜色的方块用并查集联系…
据大佬的说法这种大力乱搞题出在除NOIp以外的任何比赛都是很好的然而就是被出在了NOIp 首先对于想直接上高精的同学,我还是祝你好运吧. 我们考虑一个十分显然的性质,若\(a=b\),则对于任一自然数\(k\)都有\(a\ mod\ k=b\ mod\ k\) 所以我们考虑一下把这个等式转换成膜意义下的. 实际上就是对于那一个方程,我们取得一个值\(x\)时,计算其膜某个数的值,若为\(0\)则可以认定它有概率为正确的答案. 那么取什么值呢,根据正常人的经验,我们取一个大质数可以比较合理的保证均…
题目描述 已知方程∑i=0naixi=0\sum_{i=0}^{n}{a_ix^i}=0i=0∑n​ai​xi=0求该方程在 [1,m][1,m][1,m] 内的整数解. Solution 有一个秦九韶公式就是 a1x1+a2x2+...+anxn=x(a1+a2x1+a3x2+...+anxn−1)=x(a1+x(a2+a3x1+...+anxn−2))=...=x(a1+x(a2+x(a3+x(...).)))\begin{aligned}&\quad a_1x^1+a_2x^2+...+a…
思路非常好想,但是你很难想到去用这个算法,因为这个几乎就是个乱搞~ 我们发现多项式中每一个系数都很大,但是 $m$ 却很小,即最多只用 $10^6$ 个整数需要验证. 我们知道,如果一个数等于 $0$,那么这个数模任何一个数也都应该该等于 $0$ 所以可以直接取 $3$ 个左右的质数当模数,分别带值,取模,然后判一下等不等于 $0$. 当然,带值的部分可以用秦九昭算法,但是我感觉这只算是常数上的优化吧~ 只能在 luogu 上过,bz 上过不去~ 复杂度 $O(n\times m)$ #incl…
并查集水题.维护变量的对应位的相关关系,判断不确定点(自由元)的个数即可. 代码中的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()…
luogu 先考虑怎样的二进制串才会被3整除.可以发现如果二进制位第\(0,2,4...2n\)位如果为\(1\),那么在模3意义下为1,如果二进制位第\(1,3,5...2n+1\)位如果为\(1\),那么在模3意义下为-1.所以也就是位置上是1的奇二进制位个数减位置上是1的偶二进制位个数要被3整除 在这种条件下,如果区间内1的个数为偶数显然可以从最低位开始依次放使得被3整除,如果为奇数,那么先把除了最后三个1以外的1按照偶数的情况处理,然后这三个1中间各插入一个0,也就是\(...01010…
LINK:随机漫游 非常妙的一道题. 容易想到倒推期望. 设状态 f[i][j]表示到达第i个点 此时已经到达的集合为j能走到全集的期望边数. 只要求出来这个就能O(1)回答询问. \(f[i][j]=1+\sum_{v\in son_x,v\notin j}\frac{1}{d_i}f[i][j|v]+\sum_{v\in son_x,v\in j}\frac{1}{d_i}f[i][j]\) 有了这个东西 显然可以\((2^n\cdot n)^3\)暴力高斯消元了. 考虑优化 容易发现如果按…