fzu1704(高斯消元法解异或方程组+高精度输出)
题目链接:https://vjudge.net/problem/FZU-1704
题意:经典开关问题,求使得灯全0的方案数。
思路:题目保证至少存在一种方案,即方程组一定有解,那么套上高斯消元法的板子,求出自由变元的个数t,方案总数即2t,t可能大于64,要用到高精度计算。
AC代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std; int compare(string str1,string str2){
int len1=str1.length(),len2=str2.length();
if(len1<len2)
return -;
else if(len1>len2)
return ;
else
return str1.compare(str2);
} //高精度加法,只能是两个正数相加
string add(string str1,string str2){
string str;
int len1=str1.length(),len2=str2.length();
if(len1<len2)
for(int i=;i<=len2-len1;i++)
str1=""+str1;
else
for(int i=;i<=len1-len2;i++)
str2=""+str2;
int cf=,tmp;
len1=str1.length();
for(int i=len1-;i>=;i--){
tmp=str1[i]-''+str2[i]-''+cf;
cf=tmp/;
tmp%=;
str=char(tmp+'')+str;
}
if(cf)
str=""+str;
return str;
} //高精度减法,只能是两个正数相减,而且要大减小
string sub(string str1,string str2){
string str;
int len1=str1.length(),len2=str2.length();
for(int i=;i<=len1-len2;i++)
str2=""+str2;
int cf=;
for(int i=len1-;i>=;i--){
if(str1[i]-cf>=str2[i]){
str=char(str1[i]-cf-str2[i]+'')+str;
cf=;
}
else{
str=char(str1[i]-cf-str2[i]++'')+str;
cf=;
}
}
str.erase(,str.find_first_not_of(''));
if(str.empty())
str="";
return str;
}
//高精度乘法,只能是两个正数相乘
string mul(string str1,string str2){
string str;
int len1=str1.length(),len2=str2.length();
for(int i=len2-;i>=;i--){
string tmpstr;
int tmp=str2[i]-'',cf=,t;
if(tmp){
for(int j=;j<=len2--i;j++)
tmpstr+="";
for(int j=len1-;j>=;j--){
t=(tmp*(str1[j]-'')+cf)%;
cf=(tmp*(str1[j]-'')+cf)/;
tmpstr=char(t+'')+tmpstr;
}
if(cf)
tmpstr=char(cf+'')+tmpstr;
}
str=add(str,tmpstr);
}
str.erase(,str.find_first_not_of('')); //删除前面多余的0,因为如果是0×10,结果将会是00
if(str.empty())
str="";
return str;
}
//高精度除法,只能是两个正数相除
void div(string str1,string str2,string& con,string &rem){
if(str2=="")
return;
else if(str1==""){
con="",rem="";
return;
}
else if(compare(str1,str2)<){
con="",rem=str1;
return;
}
else if(compare(str1,str2)==){
con="",rem="";
return;
}
else{
int len1=str1.length(),len2=str2.length();
string tmpstr;
for(int i=;i<len2-;i++)
tmpstr=tmpstr+str1[i];
for(int i=len2-;i<len1;i++){
tmpstr=tmpstr+str1[i];
tmpstr.erase(,tmpstr.find_first_not_of(''));
if(tmpstr.empty())
tmpstr="";
for(char j='';j>='';j--){
string str,tmp;
str=str+j;
tmp=mul(str,str2);
if(compare(tmp,tmpstr)<=){
con=con+j;
tmpstr=sub(tmpstr,tmp);
break;
}
}
}
rem=tmpstr;
}
con.erase(,con.find_first_not_of(''));
if(con.empty())
con="";
} bool JudgeZero(string s1){
for(int i=;i<s1.length();++i)
if(s1[i]!='') return false;
return true;
} string gcd(string a,string b){
if(!JudgeZero(b)){
string s1,s2;
div(a,b,s1,s2);
return gcd(b,s2);
}
return a;
} string lcm(string a,string b){
string t=gcd(a,b),s1,s2;
a=mul(a,b);
div(a,t,s1,s2);
return s1;
}
const int maxn=;
int T,equ,var,a[maxn][maxn],x[maxn]; int Gauss(){
int k=,max_r;
for(int col=;k<equ&&col<var;++k,++col){
max_r=k;
for(int i=k+;i<equ;++i){
if(abs(a[i][col])>abs(a[max_r][col]))
max_r=i;
}
if(max_r!=k){
for(int i=col;i<var+;++i)
swap(a[max_r][i],a[k][i]);
}
if(!a[k][col]){
--k;
continue;
}
for(int i=k+;i<equ;++i){
if(!a[i][col]) continue;
for(int j=col;j<var+;++j)
a[i][j]^=a[k][j];
}
}
for(int i=k;i<equ;++i)
if(a[i][var])
return -;
return var-k;
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&equ,&var);
for(int i=;i<equ;++i)
for(int j=;j<var+;++j)
a[i][j]=;
for(int i=;i<var+;++i)
x[i]=;
for(int i=;i<equ;++i)
scanf("%d",&a[i][var]);
for(int i=;i<var;++i){
int t1,t2;
scanf("%d",&t1);
while(t1--){
scanf("%d",&t2);
--t2;
a[t2][i]=;
}
}
int t=Gauss();
string s1,s2;
s1=s1+"",s2=s2+"";
while(t--)
s1=mul(s1,s2);
cout<<s1<<endl;
}
return ;
}
fzu1704(高斯消元法解异或方程组+高精度输出)的更多相关文章
- bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...
- poj1222(高斯消元法解异或方程组+开关问题)
题目链接:https://vjudge.net/problem/POJ-1222 题意:给定一个5×6的01矩阵,改变一个点的状态时它上下左右包括它自己的状态都会翻转,因为翻转2次等价与没有翻转,那么 ...
- bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)
http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...
- 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组
[题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...
- Bzoj3517 翻硬币题解 解异或方程组
3517: 翻硬币 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 281 Solved: 211[Submit][Status][Discuss] D ...
- 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯
高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk 539. 牛棚的灯 ★★☆ ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10835 Accepted: 6 ...
- bzoj千题计划188:bzoj1923: [Sdoi2010]外星千足虫 (高斯—若尔当消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1923 #include<cstdio> #include<cstring> ...
- 高斯—若尔当(约当)消元法解异或方程组+bitset优化模板
高斯消元法是将矩阵化为上三角矩阵 高斯—若尔当消元法是 选定主元后,将主元化为1,枚举除主元之外的所有行进行消元 即将矩阵化为对角矩阵,这样不用回代 bitset<N>a[N]; int ...
随机推荐
- 【题解】Knight Moves-C++
题目Description在一个8*8的棋盘上,一只中国象棋中的马要从一个点跳到另一个点.问最少需要多少步.Input整个测试组由多组数据组成,请做到文件底结束.对于每组数据,前两个坐标代表出发点,后 ...
- 004_linuxC++之_函数的重载
(一)源码下载 (一) 函数的重载:同一个命名函数,通过传入参数的不同,调用不一样的函数 上面程序的运行结果: (二)函数只能通过参数的不一样重载函数,不能通过返回参数的不一样重载函数 运行结果报错 ...
- 五十九.大数据、Hadoop 、 Hadoop安装与配置 、 HDFS
1.安装Hadoop 单机模式安装Hadoop 安装JAVA环境 设置环境变量,启动运行 1.1 环境准备 1)配置主机名为nn01,ip为192.168.1.21,配置yum源(系统源) 备 ...
- python3.5+win7 安装 numpy 和scipy的总结
1.安装numpy. 官网下载numpy.下载地址为https://pypi.Python.org/pypi/numpy.选择与Python版本相对应的numpy版本.之后在python35 ...
- windows问题集合
1.windows创建内核对象时系统会创建内核数据块,我们通过什么方式去创建,打开,操作这些数据块呢?微软是如何做的?如果是你又会如何做?(提示:内核句柄) 2.进程 发展历史(系统方面发展) 答: ...
- 为ubuntu找个能用的桌面,顺便进行适当的改造
最近,开始玩ros,结果官方推荐ubuntu linux,虽然都是差不多的linux,无非就是软件包形式不同而已.但是,个人对ubuntu的unity桌面实在是没有爱,最让人无语的是,kubuntu无 ...
- 怎样在VMware虚拟机中使用安装并设置Ubuntu系统
1 2 3 4 5 6 7 分步阅读 Ubuntu 系统是一款优秀的.基于GNU/Linux 的平台的桌面系统. 当然,目前为止很多应用程序还完全不能允许运行在 Ubuntu 系统上,而且 Ubunt ...
- 安装RabbitMQ管理插件失败
运行 rabbitmq-plugins.bat enable rabbitmq_management后提示失败信息 是因为erlang和RabbitMQ版本冲突导致
- object_detection faster-rcnn
(t20190518) luo@luo-All-Series:~/MyFile/TensorflowProject/Faster_RCNN/models/research$ (t20190518) l ...
- ubuntu Tensorflow object detection API 开发环境搭建
https://blog.csdn.net/dy_guox/article/details/79111949 luo@luo-All-Series:~$ luo@luo-All-Series:~$ s ...