三个题放在一起写了 主要是搞搞模板 在这里简述一下怎么写高斯消元

就和代数里学的加减消元学的一样 把矩阵化为上三角形形式 然后进行回代

同时枚举当前要消元的未知数和当前化简到哪一行了

然后从这一行往后 找这一列的一个不为0的系数

如果这一列以后的每一行都是0了 那么就说明当前这个未知数可以作为一个自由元 就是有无数解的意思

然后继续枚举下一个未知数

如果找到一个不为0的 和当前这一行的所有元素swap一下 然后除了这一行外 把其他所有行在这一列的系数消为0

最后答案存在每一行的第n + 1个位置

如果化简完了 如果存在后面的某一行 他的n + 1的值不等于0 那么就是无解

bzoj1013

#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <string.h>
using namespace std;
double eps = 1e-; int n;
double a[][];
double zb[][]; void gauss()
{
int now = , to;
for(int i = ; i <= n; i++)
{
for(to = now; to <= n; to++) if(fabs(a[to][i]) > eps) break;
if(to > n) continue; if(to != now)
for(int j = ; j <= n + ; j++) swap(a[to][j], a[now][j]); double tmp = a[now][i];
for(int j = ; j <= n + ; j++) a[now][j] /= tmp;
for(int j = ; j <= n; j++)
if(j != now)
{
tmp = a[j][i];
for(int k = ; k <= n + ; k++) a[j][k] -= tmp * a[now][k];
}
now++;
}
} int main()
{
cin>>n;
for(int i = ; i <= n + ; i++)
{
for(int j = ; j <= n; j++) scanf("%lf", &zb[i][j]);
if(i > )
for(int j = ; j <= n; j++) a[i - ][j] = 2.0 * (zb[i][j] - zb[][j]), a[i - ][n + ] += zb[i][j] * zb[i][j] - zb[][j] * zb[][j];
}
gauss();
for(int i = ; i <= n - ; i++) printf("%.3lf ", a[i][n + ]);
printf("%.3lf\n", a[n][n + ]);
return ;
}

bzoj1923   高斯消元的时间复杂度是n三方的 然后这个题数据是1000 10s居然水过去了 听说有用bitset优化的方法 (以后再学吧

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std; int n, m, x, ans;
int a[][]; void gauss1()
{
int now = , to;
for(int i = ; i <= n; i++)
{
for(to = now; to <= m; to++) if(a[to][i]) break;
if(to > m)
{
ans = -;
return;
}
ans = max(ans, to); if(to != now)
for(int j = ; j <= n + ; j++) swap(a[to][j], a[now][j]); for(int j = ; j <= m; j++)
if(j != now && a[j][i])
for(int k = ; k <= n + ; k++) a[j][k] ^= a[now][k];
now++;
}
} int main()
{
cin>>n>>m;
for(int i = ; i <= m; i++)
{
char s[];
scanf("%s %d", s, &x);
int len = strlen(s);
for(int j = ; j < len; j++) a[i][j + ] = s[j] - '';
a[i][len + ] = x;
} gauss1();
if(ans == -) puts("Cannot Determine");
else
{
printf("%d\n", ans);
for(int i = ; i <= n; i++)
{
if(a[i][n + ]) puts("?y7M#");
else puts("Earth");
}
}
return ;
}

POJ1830 入门题

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std; int ans;
int q[];
int w[];
int a[][]; void gauss(int n, int m)
{
ans = ;
int now = , to;
for(int i = ; i <= n; i++)
{
for(to = now; to <= m; to++) if(a[to][i]) break;
if(to > m)
{
ans++;
continue;
} if(to != now)
for(int j = ; j <= n + ; j++) swap(a[to][j], a[now][j]); for(int j = ; j <= m; j++)
if(j != now && a[j][i])
for(int k = ; k <= n + ; k++) a[j][k] ^= a[now][k];
now++;
}
for(int i = now; i <= m; i++)
if(a[i][n + ])
{
ans = -;
return;
}
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
memset(a, , sizeof(a));
int n; scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%d", &q[i]);
for(int i = ; i <= n; i++) scanf("%d", &w[i]), w[i] ^= q[i], a[i][n + ] = w[i];
for(int i = ; i <= n; i++) a[i][i] = ; int u, v;
while(~scanf("%d%d", &u, &v) && u + v) a[v][u] = ;
gauss(n, n);
if(ans == -) puts("Oh,it's impossible~!!");
else printf("%d\n", << ans);
}
return ;
}

BZOJ1013 + BZOJ1923 + POJ1830 (高斯消元)的更多相关文章

  1. poj1830(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...

  2. *POJ1830 高斯消元

    开关问题 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8010   Accepted: 3161 Description ...

  3. 【BZOJ1013】球形空间产生器(高斯消元)

    [BZOJ1013]球形空间产生器(高斯消元) 题面 Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标, ...

  4. 【BZOJ1013】【JSOI2008】球形空间产生器 高斯消元

    题目描述 有一个\(n\)维空间中的球,告诉你球面上\(n+1\)个点的坐标,求球心的坐标. \(n\leq 10\) 题解 设\(a_{i,j}\)为第\(i\)个点的第\(j\)维坐标,\(i=0 ...

  5. 【题解】 bzoj1923: [Sdoi2010]外星千足虫 (线性基/高斯消元)

    bzoj1923,戳我戳我 Solution: 这个高斯消元/线性基很好看出来,主要是判断在第K 次统计结束后就可以确定唯一解的地方和\(bitset\)的骚操作 (我用的线性基)判断位置,我们可以每 ...

  6. BZOJ1013 JSOI2008 球形空间产生器sphere 【高斯消元】

    BZOJ1013 JSOI2008 球形空间产生器sphere Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点 ...

  7. 【BZOJ1923】[Sdoi2010]外星千足虫 高斯消元

    [BZOJ1923][Sdoi2010]外星千足虫 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 ...

  8. BZOJ1013球形空间产生器sphere 高斯消元

    @[高斯消元] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球 ...

  9. LG2447/BZOJ1923 「SDOI2010」外星千足虫 高斯消元

    问题描述 LG2447 BZOJ1923 题解 显然是一个高斯消元,但是求的东西比较奇怪 发现这个方程组只关心奇偶性,于是可以用一个\(\mathrm{bitset}\)进行优化,用xor来进行消元操 ...

随机推荐

  1. 第二天,初步slide第一版和家的照片墙

    今天基本完成任务, 1. 写了昨天的总结, 2. 完成slides的第一个完整版. 3. 家里布置了照片墙. 4. 其他的 未完成: 1. 框架搭建:Creasy没来. 领导力:为公司利益早起,任务说 ...

  2. Brackets常用插件

    Emmet插件:https://github.com/emmetio/brackets-emmet AngularJS插件:https://github.com/angular-ui/AngularJ ...

  3. 数据结构 - 希尔排序(Shell&#39;s Sort) 具体解释 及 代码(C++)

    数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2 ...

  4. linux CentOS中创建用户 无密码登录

    首先点击左上角的 “应用程序” -> “系统工具” -> “终端”,首先在终端中输入 su ,按回车,输入 root 密码以 root 用户登录,接着执行命令创建新用户 hadoop: 接 ...

  5. Wedding(2-SAT)

    传送门 稍微复杂一点的2-SAT. 读题之后发现有以下限制: 1.每一对夫妻(包括新郎和新娘)不能坐在桌子的一侧. 2.对于一些给定的非法(自行脑补)的关系,这两个人不能坐在新娘的同一侧. 因为每个人 ...

  6. Flask的jinja2模板中自定义过滤器的使用

    大部分的模板引擎都是支持过滤器功能的,jinja2也不例外,它提供了丰富的内置过滤器,但是有些时候还是没办法满足我们的需求,好在jinja2支持自定义过滤器,下面是一个简单的例子. 下面的例子完成了自 ...

  7. Git-flow 一个简单高效的Git工作流

    背景 由于Git的分支比SVN更好管理且更易使用,最近团队从SVN迁移到Git,需要重新规划开发流程,最终确定使用Git-flow工作流,这是目前比较流行的一种分支模型,下面是Git-flow的简易流 ...

  8. Scala 归约操作- - - - -reduce

    object 归约操作_reduce { def main(args: Array[String]): Unit = { val list=List(,,,,) val result=list.red ...

  9. jquery easyui 显示和关闭数据加载的遮罩

    $('#yearReportTable').datagrid('loading');//打开等待div $('#yearReportTable').datagrid('loaded');//关闭等待d ...

  10. 人脸识别(初学篇)-VS2015+opencv3.2的配置

    初学人脸识别,感觉安装也是一个很大的麻烦. 写在这里记录一下吧 一:先安装好我们需要的软件 首先安装Vs2015,在官网或者csdn搜一下应该找的到. 安装步骤没有太多讲究. 点击exe文件,我选择的 ...