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

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

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

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

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

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

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

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

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

bzoj1013

  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <iostream>
  5. #include <string.h>
  6. using namespace std;
  7. double eps = 1e-;
  8.  
  9. int n;
  10. double a[][];
  11. double zb[][];
  12.  
  13. void gauss()
  14. {
  15. int now = , to;
  16. for(int i = ; i <= n; i++)
  17. {
  18. for(to = now; to <= n; to++) if(fabs(a[to][i]) > eps) break;
  19. if(to > n) continue;
  20.  
  21. if(to != now)
  22. for(int j = ; j <= n + ; j++) swap(a[to][j], a[now][j]);
  23.  
  24. double tmp = a[now][i];
  25. for(int j = ; j <= n + ; j++) a[now][j] /= tmp;
  26. for(int j = ; j <= n; j++)
  27. if(j != now)
  28. {
  29. tmp = a[j][i];
  30. for(int k = ; k <= n + ; k++) a[j][k] -= tmp * a[now][k];
  31. }
  32. now++;
  33. }
  34. }
  35.  
  36. int main()
  37. {
  38. cin>>n;
  39. for(int i = ; i <= n + ; i++)
  40. {
  41. for(int j = ; j <= n; j++) scanf("%lf", &zb[i][j]);
  42. if(i > )
  43. 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];
  44. }
  45. gauss();
  46. for(int i = ; i <= n - ; i++) printf("%.3lf ", a[i][n + ]);
  47. printf("%.3lf\n", a[n][n + ]);
  48. return ;
  49. }

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

  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <string.h>
  5. using namespace std;
  6.  
  7. int n, m, x, ans;
  8. int a[][];
  9.  
  10. void gauss1()
  11. {
  12. int now = , to;
  13. for(int i = ; i <= n; i++)
  14. {
  15. for(to = now; to <= m; to++) if(a[to][i]) break;
  16. if(to > m)
  17. {
  18. ans = -;
  19. return;
  20. }
  21. ans = max(ans, to);
  22.  
  23. if(to != now)
  24. for(int j = ; j <= n + ; j++) swap(a[to][j], a[now][j]);
  25.  
  26. for(int j = ; j <= m; j++)
  27. if(j != now && a[j][i])
  28. for(int k = ; k <= n + ; k++) a[j][k] ^= a[now][k];
  29. now++;
  30. }
  31. }
  32.  
  33. int main()
  34. {
  35. cin>>n>>m;
  36. for(int i = ; i <= m; i++)
  37. {
  38. char s[];
  39. scanf("%s %d", s, &x);
  40. int len = strlen(s);
  41. for(int j = ; j < len; j++) a[i][j + ] = s[j] - '';
  42. a[i][len + ] = x;
  43. }
  44.  
  45. gauss1();
  46. if(ans == -) puts("Cannot Determine");
  47. else
  48. {
  49. printf("%d\n", ans);
  50. for(int i = ; i <= n; i++)
  51. {
  52. if(a[i][n + ]) puts("?y7M#");
  53. else puts("Earth");
  54. }
  55. }
  56. return ;
  57. }

POJ1830 入门题

  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <string.h>
  5. using namespace std;
  6.  
  7. int ans;
  8. int q[];
  9. int w[];
  10. int a[][];
  11.  
  12. void gauss(int n, int m)
  13. {
  14. ans = ;
  15. int now = , to;
  16. for(int i = ; i <= n; i++)
  17. {
  18. for(to = now; to <= m; to++) if(a[to][i]) break;
  19. if(to > m)
  20. {
  21. ans++;
  22. continue;
  23. }
  24.  
  25. if(to != now)
  26. for(int j = ; j <= n + ; j++) swap(a[to][j], a[now][j]);
  27.  
  28. for(int j = ; j <= m; j++)
  29. if(j != now && a[j][i])
  30. for(int k = ; k <= n + ; k++) a[j][k] ^= a[now][k];
  31. now++;
  32. }
  33. for(int i = now; i <= m; i++)
  34. if(a[i][n + ])
  35. {
  36. ans = -;
  37. return;
  38. }
  39. }
  40.  
  41. int main()
  42. {
  43. int T;
  44. scanf("%d", &T);
  45. while(T--)
  46. {
  47. memset(a, , sizeof(a));
  48. int n; scanf("%d", &n);
  49. for(int i = ; i <= n; i++) scanf("%d", &q[i]);
  50. for(int i = ; i <= n; i++) scanf("%d", &w[i]), w[i] ^= q[i], a[i][n + ] = w[i];
  51. for(int i = ; i <= n; i++) a[i][i] = ;
  52.  
  53. int u, v;
  54. while(~scanf("%d%d", &u, &v) && u + v) a[v][u] = ;
  55. gauss(n, n);
  56. if(ans == -) puts("Oh,it's impossible~!!");
  57. else printf("%d\n", << ans);
  58. }
  59. return ;
  60. }

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. Noip模拟 Day6.12

    第一题:贪吃蛇(snake) 本题其实就是判断一个有向图中有没有环,做一次拓扑排序就可以了,如果所有点都入队了,就表示没有环,否则就有环.或者就是dfs一次,每个点只需要被访问一次,这样也是O(n)的 ...

  2. PHP mysql 连接ipV6地址

    需要在PHP页面中通过ipv6连接数据库,但是发现无论是用mysql_connect还是mysqli_connect,如果host是ipv6格式,就不能正常连接,会提示“php_network_get ...

  3. delphi中URL的汉字编码

    delphi中URL的汉字编码 show.asp?sort=全部&sortlevel=1&gorq=供&n=5&sitename=全部&img=yes& ...

  4. SQL Server 运行计划操作符具体解释(1)——断言(Assert)

    前言: 非常多非常多地方对于语句的优化,一般比較靠谱的回复即使--把运行计划发出来看看.当然那些仅仅看语句就说怎样怎样改代码,我一直都是拒绝的,由于这样的算是纯蒙.依据本人经验,大量的性能问题单纯从语 ...

  5. 在linux上处理base64加密和解密

    http://snailwarrior.blog.51cto.com/680306/142472/ 2.从标准输入读取文件内容,base64编码并打印到标准输出 [root@localhost tes ...

  6. Ural 1517. Freedom of Choice 后缀数组

    Ural1517 所谓后缀数组, 实际上准确的说,应该是排序后缀数组. 一个长度为N的字符串,显然有N个后缀,将他们放入一个数组中并按字典序排序就是后缀数组的任务. 这个数组有很好的性质,使得我们运行 ...

  7. http-2.2

    HTTP-2.2 httpd 配置文件的组成: grep "Section" /etc/httpd/conf/httpd.conf ### Section 1: Global En ...

  8. 测试DNS服务的命令

    测试DNS服务的命令 dig dig用于测试dns系统,因此不会查询hosts文件进行解析. dig - DNS lookup utility dig [@global-server] [domain ...

  9. 浅谈C++多态性(转载)

    转载:http://blog.csdn.net/hackbuteer1/article/details/7475622 C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言.我们今天就会为大 ...

  10. bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛【dp+树状数组+hash】

    最长上升子序列.虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j]<a[i]) O(n^2) #include<iostream> #in ...