NEFU 503 矩阵求解 (非01异或的高斯消元)
中文题,高斯消元模板题。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
#include <ctime>
using namespace std;
typedef long long in;
const int maxn=;
//有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var
in equ,var;
in a[maxn][maxn]; //增广矩阵
in x[maxn]; //解集
in free_x[maxn];//用来存储自由变元(多解枚举自由变元可以使用)
in free_num;//自由变元的个数
//返回值为-1表示无解,为0是唯一解,否则返回自由变元个数
in gcd(in a,in b)
{
return b==?a:gcd(b,a%b);
}
in lcm(in a,in b)
{
return a/gcd(a,b)*b;
}
in gauss()
{
in max_r,col,k;
free_num=;
for(k=,col=; k<equ&&col<var; k++,col++)
{
max_r=k;
for(in i=k+; i<equ; i++)
if(abs(a[i][col])>abs(a[max_r][col]))
max_r=i;
if(!a[max_r][col])
{
k--;
free_x[free_num++]=col;
continue;
}
if(max_r!=k)
for(in j=col; j<var+; j++)
swap(a[k][j],a[max_r][j]);
/*for(int i=k+1;i<equ;i++)
{
if(a[i][col])
{
for(int j=col;j<var+1;j++)
a[i][j]^=a[k][j];
}
}*/
for(in i=k+; i<equ; ++i)
{
if(a[i][col] != )
{
in LCM=lcm(abs(a[i][col]),abs(a[k][col]));
in ta=LCM/abs(a[i][col]),tb=LCM/abs(a[k][col]);
if(a[i][col]*a[k][col] < )
tb=-tb;
for(in j=col; j<var+; ++j)
a[i][j]=a[i][j]*ta-a[k][j]*tb;
}
}
}
for(in i=k; i<equ; i++)
if(a[i][col])
return -;
if(k<var) return var-k;
for(in i=k-; i>=; --i)
{
in tmp=a[i][var];
for(in j=i+; j<var; ++j)
if(a[i][j]!=)
tmp=tmp-(a[i][j]*x[j]);
x[i]=tmp/a[i][i];
}
/*for(int i=var-1;i>=0;i--)
{
x[i]=a[i][var];
for(int j=i+1;j<var;j++)
x[i]^=(a[i][j]&&x[j]);
}*/
return ;
}
in n;
void init()
{
memset(a,,sizeof(a));
memset(x,,sizeof(x));
equ=n;
var=n;
}
void solve()
{
in t=gauss();
if(t==-)
{
puts("no sovle!");
}
else if(t==)
{
for(int i=; i<n-; i++)
printf("%d ",x[i]);
printf("%d\n",x[n-]);
}
else
{
puts("more sovle!");
}
}
int main()
{
while(scanf("%lld",&n)!=EOF)
{
init();
for(int i=; i<n; i++)
for(int j=; j<n; j++)
scanf("%lld",&a[i][j]);
for(int i=; i<n; i++)
scanf("%lld",&a[i][n]);
solve();
}
return ;
}
NEFU 503 矩阵求解 (非01异或的高斯消元)的更多相关文章
- 【HDU 5833】Zhu and 772002(异或方程组高斯消元)
300个最大质因数小于2000的数,选若干个它们的乘积为完全平方数有多少种方案. 合法方案的每个数的质因数的个数的奇偶值异或起来为0. 比如12=2^2*3,对应的奇偶值为01(2的个数是偶数为0,3 ...
- hdu 5833 Zhu and 772002 异或方程组高斯消元
ccpc网赛卡住的一道题 蓝书上的原题 但是当时没看过蓝书 今天又找出来看看 其实也不是特别懂 但比以前是了解了一点了 主要还是要想到构造异或方程组 异或方程组的消元只需要xor就好搞了 数学真的是硬 ...
- 【HDU 5833】Zhu and 772002(异或方程组高斯消元讲解)
题目大意:给出n个数字a[],将a[]分解为质因子(保证分解所得的质因子不大于2000),任选一个或多个质因子,使其乘积为完全平方数.求其方法数. 学长学姐们比赛时做的,当时我一脸懵逼的不会搞……所以 ...
- 3364 Lanterns (异或方程组高斯消元)
基本思路.首先构造一个n*(m+1)的矩阵,同时标记一个行数row,row从零开始,然后找出每一列第一个非零的数,和第row行互换, 然后对row到n行,异或运算.最终的结果为2^(m-row) #i ...
- P3317 [SDOI2014]重建 变元矩阵树定理 高斯消元
传送门:https://www.luogu.org/problemnew/show/P3317 这道题的推导公式还是比较好理解的,但是由于这个矩阵是小数的,要注意高斯消元方法的使用: #include ...
- Luogu3164 CQOI2014 和谐矩阵 异或高斯消元
传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...
- POJ 1830 开关问题 【01矩阵 高斯消元】
任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...
- 【poj1830-开关问题】高斯消元求解异或方程组
第一道高斯消元题目~ 题目:有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关 ...
- BZOJ3503:[CQOI2014]和谐矩阵(高斯消元,bitset)
Description 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本 身,及他上下左右的4个元素(如果存在). 给定矩阵的行数和列数,请计算并输 ...
随机推荐
- activiti数据库表结构全貌解析
http://www.jianshu.com/p/e6971e8a8dad 下面本人介绍一些activiti这款开源流程设计引擎的数据库表结构,首先阐述:我们刚开始接触或者使用一个新的东西(技术)时我 ...
- html 图像映射
个人先做而一个例子 <body> <img src="图像映射/enterdesk.com-D69055E2B422567CB273963EA05FF7D4.jpg&quo ...
- Alice and Bob 要用到辗转相减
Alice and BobTime Limit: 1 Sec Memory Limit: 64 MBSubmit: 255 Solved: 43 Description Alice is a be ...
- window使用qt遇到的坑
1.window上的qt对图片的检测与识别不够完善.往往改了一个ui的背景图片,运行出来显示的却是旧的背景图片. 原因: 由于之前是项目与项目之间整合在一起,然后把ui_*_ui.h的临时文件也放在 ...
- Javascript高级程序设计——垃圾收集
javascipt具有自动垃圾回收机制 局部变量只在函数执行过程中存在,在这个过程中,会为局部变量在栈上(或堆)内存分配相应空间,来储存他们的值,当函数执行完,局部变量就没有存在的必要了,所以这个时候 ...
- UNITY3D在线更新之道-CSlight 使用总结
转自:http://blog.csdn.net/leonwei/article/details/39233775 最近做U3D的热更新,研究了各种方式无果后,最容易最先想到的方式就是利用c#的反射机制 ...
- html5的触摸事件
1.触摸事件有哪些 touchstart,touchmove,touchend 2.分别什么时候触发 touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发. touc ...
- JavaScript中的跨域
跨域是什么 跨域就是指从一个域名的网页去请求另一个域名的资源,因为JavaScript同源策略的限制,资源无法获取.比如从www.baidu.com 页面去请求 www.google.com 的资源, ...
- python 集合 -----直接用逗号连接的是元组,不是list
t = 12345, 54321, 'hello!' >>> t[0] 12345 >>> t (12345, 54321, 'hello!') 元组:元组由逗号分 ...
- [BZOJ1999][codevs1167][Noip2007]Core树网的核
[BZOJ1999][codevs1167][Noip2007]Core树网的核 试题描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(t ...