【luogu P2455 [SDOI2006]线性方程组】 题解

题目链接:https://www.luogu.org/problemnew/show/P2455

嗯...在消元过程中不要直接拿矩阵元素自己消,会把自己消成0.

 1 #include <algorithm>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <iostream>
 5 using namespace std;
 6 const int maxn = 200;
 7 const double eps = 1e-7;
 8 double A[maxn][maxn], ans[maxn];
 9 int n;
10 int main()
11 {
12     scanf("%d",&n);
13     for(int i = 1; i <= n; i++)
14     for(int j = 1; j <= n+1; j++)
15     scanf("%lf", &A[i][j]);
16     for(int i = 1; i <= n; i++)
17     {
18         int p = i;
19         for(int j = i + 1; j <= n; j++)
20           if(fabs(A[j][i]) > fabs(A[p][i])) p = j;
21         for(int j = 1; j <= n + 1; j++) swap(A[p][j],A[i][j]);
22
23         if(fabs(A[i][i]) < eps) continue;
24         double div = A[i][i];
25         for(int j = 1; j <= n + 1; j++) A[i][j]/=div;
26         for(int j = 1; j <= n; j++)
27         {
28             if(i != j)
29             {
30                 double div = A[j][i];
31                 for(int k = 1; k <= n + 1; k++) A[j][k] -= A[i][k]*div;
32             }
33         }
34     }
35     int NoSolution = 0, ManySolution = 0;
36     for(int i = 1; i <= n; i++)
37     {
38         int Nonum = 0, Manynum = 0;
39         for(int j = 1; j <= n + 1 && fabs(A[i][j]) < eps; j++)
40         Nonum++,Manynum++;
41         if(Manynum > n) ManySolution = 1;
42         if(Nonum == n) NoSolution = 1;
43     }
44         if(NoSolution) {printf("-1");return 0;}
45         if(ManySolution) {printf("0");return 0;}
46     for(int i = n; i >= 1; i--)
47     {
48         ans[i] = A[i][n+1];
49         for(int j = i - 1; j >= 1; j--)
50         {
51             A[j][n+1] -= ans[i] * A[j][i];
52             A[j][i] = 0;
53         }
54     }
55     for(int i = 1; i <= n; i++)
56     printf("x%d=%.2lf\n",i,ans[i] + eps);
57     return 0;
58 }

原文地址:https://www.cnblogs.com/MisakaAzusa/p/8960935.html

时间: 2024-07-31 04:28:22

【luogu P2455 [SDOI2006]线性方程组】 题解的相关文章

P2455 [SDOI2006]线性方程组

P2455 [SDOI2006]线性方程组 真\(\cdot\)高斯消元模板题 由于各种hack数据被造出来~码量突增~,其实也就多了二三十行 将每行系数消到最多有一个非0数 特殊情况: 在过程同时 没有这元了,则表示有无穷解 发现一行系数都为0,但函数值不为0,则表示无解 最后要注意的是,无穷解的前提是有解 #include <iostream> #include <algorithm> #include<cmath> #include<cstring>

luogu P1541 乌龟棋 题解

\(luogu\) P1541 乌龟棋 题解 题目描述 这道题目想状态的时候想多了一维表示当前走了多少步,其实这个完全没有必要,因为根据你的牌的使用就可以知道你当前在哪一个位置. 状态 设\(f[i][j][k][l]\)表示已经用了\(i\)张步数为\(1\)的牌,\(j\)张步数为\(2\)的牌,\(k\)张步数为\(3\)的牌,\(l\)张步数为\(4\)的牌所能取得的最大分数. 转移 因为只有这四种牌,所以只需要枚举到达当前的步数的最后一步用的那张牌,然后对用四种牌的情况取\(\max\

[luogu]P1262 间谍网络 题解

原题目:[luogu]P1262 间谍网络 数据范围好小啊(小声) 首先对于环 , 我们可以直接缩成点 , 如果环上的有好多可以收买的间谍的话就找其中要价最低的作为这个缩点后的点的要价 然后怎么处理呐? 我做完以后看到题解区有神仙一个循环就能处理出答案 但是我太菜了自己做的时候并没有想到qaq 所以就用了 DFS 再建一个缩点后的图 , 然后从每一个可以被收买的点上 DFS , 最后看看有没有点没有被搜到就可以了 如果说从一个可以被收买的点 a , 搜的时候找到了另一个已经搜过而且也是可以被收买

【luogu P3952 时间复杂度】题解

对于2017 D1 T2 这道题 实实在在是个码力题,非常考验耐心. 其实大体的思路并不是非常难想出来,但是要注意的小细节比较多. 题目链接:https://www.luogu.org/problemnew/show/P3952 思路 对于每一个程序,先读入L和O(),并将其中的时间复杂度抠出来. 其次整行读入字符串,即所给定的程序. 判断第一个字符是F or E F i x y 需要把x y拿出来,把i压进栈 E 退栈 压进i后为了方便退栈及退栈时判断,用一个flag标记 每做完一个程序,与前

【luogu P1082 同余方程】题解

最近一直在学习数论,讲得很快,害怕落实的不好,所以做一道luogu的同余方程练练手. 关于x的同余方程 ax ≡ 1 mod m 那么x其实就是求a关于m的乘法逆元 ax + my = 1 对于这个不定方程的全部解是 { x = x0 + m/gcd(a,m) { y = y0 - a/gcd(a,m) 我们可以用exgcd来求出其中的一组特解x0 那么什么是exgcd? 先不考虑exgcd,假设当前我们要处理的是求出 a 和 b的最大公约数,并求出 x 和 y 使得 a*x + b*y= gc

[luogu 2458][SDOI2006]保安站岗

题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互相望见.总经理要求所有通道的每个端点(树的顶点)都要有人全天候看守,在不同的通道端点安排保安所需的费用不同. 一个保安一旦站在某个通道的其中一个端点,那么他除了能看守住他所站的那个端点,也能看到这个通道的另一个端点,所以一个保安可能同时能看守住多个端点(树的结点),因此没有必要在每个通道的端点都安排

【luogu P2831 愤怒的小鸟】 题解

题目链接:https://www.luogu.org/problemnew/show/P2831 写点做题总结:dp,搜索,重在设计状态,状态设的好,转移起来也方便. 对于一条抛物线,三点确定.(0,0)是固定的,所以我们一条抛物线要用两只猪确定.再多的猪就只能用来判断是不是在这条抛物线上了. 于是我们把猪分成两种:在已有方程里的猪,单独的猪还没有确定方程. 那么对于一只猪,就会有被以前方程覆盖/和前面单独的猪构成新抛物线/自己单独. #include <cmath> #include <

luogu P2458 [SDOI2006]保安站岗

显而易见 树形dp 然而我做了很很很很很久 最后看讨论版才de出来bug 要考虑三个状态 1.父节点有保安 2.本身有保安 3.儿子节点放保安 1.2.douhenhaokaolv 3.不太容易,看了题解才有思路 dp[u][2]:点u没有放置警察,且目前未被任何节点控制. 所以u一定会被它的至少一个儿子控制,换句话来说,u的儿子中,至少有一个要放置警察.不妨设这个儿子为x,那么dp[u][2]的初始值应当为dp[x][0],对于其它儿子依旧是除了无法选择被父亲控制这种状态其它都可以选.综上dp

Luogu P3873 [TJOI2010]天气预报 题解

这题输入数据好坑啊.. 本题解是给像我一样的蒟蒻写的,可能略显啰嗦,已经懂了的大佬可以出门右转,去切掉IOI 我们先分析题目,将每一个\(w_i\),它的计算方式写成如下方式: \(w_i=a_1*w_{i-1}+a_2*w_{i-2}+\cdots+a_n*w_{i-n}\) 再注意到题中的这句话: a1, a2, ..., an是已知常数 所以这是一个常系数的线性递推方程.很自然的,对于这种方程,我们可以想到直接\(O(nm)\)递推(每个数都要乘n次). 继续看题.这时候我们惊讶的发现了下