题目链接: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(高斯消元法解异或方程组+高精度输出)的更多相关文章

  1. bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...

  2. poj1222(高斯消元法解异或方程组+开关问题)

    题目链接:https://vjudge.net/problem/POJ-1222 题意:给定一个5×6的01矩阵,改变一个点的状态时它上下左右包括它自己的状态都会翻转,因为翻转2次等价与没有翻转,那么 ...

  3. bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...

  4. 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组

    [题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...

  5. Bzoj3517 翻硬币题解 解异或方程组

    3517: 翻硬币 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 281  Solved: 211[Submit][Status][Discuss] D ...

  6. 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯

    高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk  539. 牛棚的灯 ★★☆   ...

  7. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10835   Accepted: 6 ...

  8. bzoj千题计划188:bzoj1923: [Sdoi2010]外星千足虫 (高斯—若尔当消元法解异或方程组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1923 #include<cstdio> #include<cstring> ...

  9. 高斯—若尔当(约当)消元法解异或方程组+bitset优化模板

    高斯消元法是将矩阵化为上三角矩阵 高斯—若尔当消元法是 选定主元后,将主元化为1,枚举除主元之外的所有行进行消元 即将矩阵化为对角矩阵,这样不用回代 bitset<N>a[N]; int ...

随机推荐

  1. MySQL 锁(lock与latch)

    一.什么是锁 锁机制用于管理对共享资源的并发访问,它是数据库系统区别于文件系统的一个关键特性. 数据库系统使用锁是为了支持对共享资源的并发访问,提供数据的完整性和一致性. InnoDB存储引擎锁的实现 ...

  2. 51nod 1020

    求 $n$ 个数的排列中逆序数为 $k$ 的排列数$f[n][k]$ 表示 $n$ 个数的排列中逆序数为 $k$ 的排列数$f[n][k] = \sum_{i = 0}^{n - 1} f[n - 1 ...

  3. UVALive 4254 Processor ——(二分+优先队列处理)

    题目是求最小化最大值,很显然是二分,但是二分以后怎么判断mid是否可行并不容易. 代码参考了网上一个博客的代码.巧妙之处在于一秒一秒的考虑,这样可以把处理速度mid直接转化成1秒内实际的量来解决(避免 ...

  4. docker 部署 .net core

    1.centos安装好sdk2.1,安装好docker,这些基本的操作就不赘述. 2.准备好core项目,版本2.1 3.新建dockerfile文件放到项目发布文件夹里,里面内容如下: FROM m ...

  5. form表单无刷新提交

    Ajax最大的特点就是可以不刷新页面而实现数据的通信及更改页面信息.那么用AJAX进行后台通信传递字符串还是可以的,遇到上传文件该怎么办呢?基于安全考虑,JS是不能直接进行文件操作的,只好用原始的fr ...

  6. gensim word2vec实践

    语料下载地址 # -*- coding: utf-8 -*- import jieba import jieba.analyse # suggest_freq调节单个词语的词频,使其能(或不能)被分出 ...

  7. 《maven实战》笔记(5)----maven的版本

    maven中构件和项目都有自己的版本,其中分为稳定的发布版本和不稳定的快照版本. 1.0.0.1.3-alpha-4和2.0就是稳定版本,而2.1-SNAPSHOT和2.1-20091214.2214 ...

  8. SQL-W3School-高级:SQL FOREIGN KEY 约束

    ylbtech-SQL-W3School-高级:SQL FOREIGN KEY 约束 1.返回顶部 1. SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 P ...

  9. Servlet的入门案例

    编写入门案例 1)编写java类,继承HttpServlet类 2)重新doGet和doPost方法 3)Servlet程序交给tomcat服务器运行!! 3.1 servlet程序的class码拷贝 ...

  10. 【原创】smarty引擎下的导航按钮高亮实现

    <?php$_nvaarr = array( array('name'=>'首页','url'=>'company.php?id='), array('name'=>'公司介绍 ...