【洛谷P2447】[SDOI2010]外星千足虫】的更多相关文章

P2447 [SDOI2010]外星千足虫 题目描述 公元2089年6月4日,在经历了17年零3个月的漫长旅行后,“格纳格鲁一号”载人火箭返回舱终于安全着陆.此枚火箭由美国国家航空航天局(NASA)研制发射,行经火星.金星.土卫六.木卫二.谷神星.“张衡星”等23颗太阳系星球,并最终在小行星“杰森星”探寻到了地外生命.宇航员在“杰森星”地表岩层下45.70米位置发现一批珍贵的活体生命样本,并将其带回检测.在带回的活体样本中,最吸引人的当属这些来自外星的千足虫了.这些虫子身躯纤长,身体分为若干节.…
题意 题目链接 Sol 异或高斯消元的板子题. bitset优化一下,复杂度\(O(\frac{nm}{32})\) 找最优解可以考虑高斯消元的过程,因为异或的特殊性质,每次向下找的时候找到第一个1然后交换就行,这样显然是最优的 #include<bits/stdc++.h> using namespace std; const int MAXN = 2001; inline int read() { char c = getchar(); int x = 0, f = 1; while(c…
题目大意:有$n$个数,每个数为$0$或$1$,给你其中一些关系,一个关系形如其中几个数的异或和是多少,问最少知道前几个关系就可以得出每个数是什么,并输出每个数 题解:异或方程组,和高斯消元差不多,就是把加减改成了异或. 卡点:用$bitset$优化,输出时输反了 C++ Code: #include <algorithm> #include <iostream> #include <bitset> #define maxn 1010 #define maxm 2010…
一开始以为是异或高斯消元,实际上是简单线性基. 直接往线性基里插入,直到线性基满了就解出来了. // luogu-judger-enable-o2 #include<bits/stdc++.h> #define il inline #define vd void typedef long long ll; il int gi(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=getchar()…
题目大意:给定一个 M 个含 N 个未知数的异或方程组,保证有解,若存在唯一解,给出至少需要几个方程才能得出唯一解,若不存在,直接输出不存在. 题解:异或方程组也满足类似初等行变换的操作,只不过所有的操作都是异或.依旧采用高斯消元来处理异或方程组,即:对于每列来说,从等于当前列的行号开始遍历每一行,找到一个当前列的系数是 1 的行,并进行交换操作.交换后,对改行下面的所有行来说,若当前列的值是 1,则进行异或操作.最后回代即可求出所有的未知数的奇偶性. 代码如下 #include <bits/s…
题目 P2447 [SDOI2010]外星千足虫 解析 sol写到自闭,用文字描述描述了半个小时没描述出来,果然还是要好好学语文 用高斯消元求解异或方程组. 因为 \(奇数\bigoplus奇数=偶数\) \(偶数\bigoplus偶数=偶数\) \(奇数\bigoplus偶数=奇数\) \(0\)为偶数,\(1\)为奇数, \((奇数+奇数)\mod 2=0\) \((偶数+偶数)\mod 2=0\) \((奇数+偶数)\mod 2=1\) 若把第一个里面的奇偶数分别换成\(1\)和\(0\)…
题目链接:https://www.luogu.org/problemnew/show/P2447 dalao们都说简单...解异或方程组 可我不是dalao qwq #include <algorithm> #include <cstdio> #include <cmath> #include <iostream> #include <bitset> using namespace std; ; ; char s[maxn]; bitset<…
怎么说呢? 因为是在mod 2 意义下的吗(一般是遇到二就可能是位运行算或二分图) 就可以利用异或计算. 因为奇数和偶数在二进制上就用判断最后一位就可以了 然后因为异或符合交换律和结合律 直接消元就可以辣 不过对于这个题,输出第一个数字可能是对与我这种蒟蒻的一个挑战.所以,我会在代码中详细的注释 bitset #include<cstdio> #include<algorithm> #include<iostream> #include<bitset> us…
原题传送门 根据题意,题目给的每个操作就相当于异或上选中的那几只虫子的足数(mod 2)等于0/1 这是一个异或方程组,珂以用高斯消元解出每个虫子的足数(mod 2).所需最小次数或判断有多解 但是看题目数据范围\(n \leq 1000,m \leq 2000\),如果直接高斯消元\(O(n^2m)\)的话超时无疑 观察这题的个性:方程组中要通过上下行异或进行消元,这是位运算,一定珂以用bitset优化 我们对每一行开一个bitset,这样消元时直接把两行的bitset异或起来,复杂度为\(O…
链接 给出的条件是异或类型的方程,可以直接用bitset优化高斯消元. 至于求K,在高斯消元时记录用到的最大的方程的编号即可. 代码: // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; #define N 1007 #define M 2007 char s[N]; bitset<N> b[M]; int n,m; int main() { int i,j; scanf("%d%d…