【Vijos P1052】 贾老二算算术 高斯消元傻题

#include <stdio.h>
int main()
{
	puts("转载请注明出处谢谢");
	puts("http://blog.csdn.net/vmurder/article/details/43445323");
}

题解:

虽然是说有唯一解,但是依然需要在消到某一层时判0/非0,然后适当交换位置。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 105
#define eps 1e-3
using namespace std;
int n;
double a[N][N],ans[N];
void Gauss()
{
	int i,j,k;
	for(i=1;i<=n;i++)
	{
		for(j=i;j<=n&&!a[j][i];j++);
		if(i!=j)for(k=i;k<=n+1;k++)swap(a[i][k],a[j][k]);
		for(j=i+1;j<=n;j++)
		{
			for(k=n+1;k>=i;k--)
			{
				a[j][k]-=a[i][k]/a[i][i]*a[j][i];
			}
		}
	}
	for(i=n;i;i--)
	{
		ans[i]=a[i][n+1];
		for(j=i+1;j<=n;j++)ans[i]-=a[i][j]*ans[j];
		ans[i]/=a[i][i];
	}
}
int main()
{
	freopen("test.in","r",stdin);
	int i,j,k;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		for(j=1;j<=n+1;j++)
			scanf("%lf",&a[i][j]);
	Gauss();
	for(i=1;i<=n;i++)
	{
		printf("%d",(int)(ans[i]+eps));
		if(i!=n)printf(" ");
	}
	return 0;
}
时间: 2024-10-23 12:55:12

【Vijos P1052】 贾老二算算术 高斯消元傻题的相关文章

VIJOS 1052贾老二算算术 (高斯消元)

描述 贾老二是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于 {x+y=3 x-y=1} 这样的方程组就束手无策了.于是他要你来帮忙.前提是一次方程组且保证在integer的范围内可以处理所有问题. 格式 输入格式 第一行一个数字N(1≤N≤100)表示要求的未知数的个数,同时也是所给的方程个数. 第2到N+1行,每行N+1个数.前N个表示第1到N个未知数的系数.第N+1个数表示N个未知数乘以各自系数后的加和.(保

POJ 1830 【高斯消元第一题】

首先...使用abs()等数学函数的时候,浮点数用#include<cmath>,其它用#include<cstdlib>. 概念: [矩阵的秩] 在线性代数中,一个矩阵A的列秩是A的线性无关的纵列的极大数目.类似地,行秩是A的线性无关的横行的极大数目. 此题如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择,既1 << n 对于r以下的行,必定全是0,那么如果a[i][n]!=0 必然出现矛盾,于是判定无解. 1 #include <iostr

【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题

最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define for1(i,a,n) for(int i=(a);i<=(n);++i) #define for2(i,a,n) for(int i=(a);i<(n);++i) #define for3(i,a,n) f

POJ 1222 extended lights out 高斯消元 板子题

题目链接:http://poj.org/problem?id=1222 题目描述:其实就是开关问题, 按下按钮会影响当前和周围的四个按钮, 问关闭所有灯的方案 解题思路:以前用搜索做过, 那时候是刚刚接触ACM的时候, 当时劲头真足啊, 这个解释的很好:http://blog.csdn.net/u013508213/article/details/47263183 代码: #include <iostream> #include <cstdio> #include <cstr

HDU 3359 高斯消元模板题,

http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 / 个数,就是矩阵B的b[i][j] 现在给出B,要求A 那么我们设A矩阵为a[1][1], a[1][2], a[1][3]..... 那么对于每一个b[i][j]我们有b[i][j] = (a[1][1] + a[1][2] + ... + ) / cnt 所以这样可以建议一条方程,然后guas

LightOJ 1151 Snakes and Ladders 高斯消元

给你一个地图10*10,从1到100,问掷骰子的次数的期望,中间会有传送门从a到b. 高斯消元基础题,学了一发板子,x存放多出来的,a存放系数: 要么是dp[i]=(dp[i+1]+...+dp[i+6]+6)/6; 要么是dp[i]=dp[go[i]]; 值得注意的是哪怕是没有dp[i+6]也要加6,因为说了,如果超界那投得次数也要算上. #include <iostream>#include <functional>#include <algorithm>#incl

算法复习——高斯消元(ssoi)

题目: 题目描述 Tom 是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于下面这样的方程组就束手无策了.x+y=3x-y=1于是他要你来帮忙.给定一个线性多元一次方程组,请你求出所有未知数的解.保证在 int 范围内可以处理所有问题. 输入格式 输入文件的第一行一个数字 N(1≤N≤100),表示给定的方程组中的未知数的个数,同时也是这个方程组含有的方程个数.第 2 到 N+1 行,每行 N+1 个数.每行的前 N

【BZOJ2337】Xor和路径(高斯消元)

[BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算从\(1\)号点开始 到\(n\)的路径中,路径的异或和为\(1\)的概率 显然没法算 还是一样的 考虑高斯消元 对于每一个节点\(i\) \[f[i]=\sum_{w(u,i)=1}\frac{1-f[u]}{op[u]}+\sum_{w(u,i)=1}\frac{f[u]}{op[u]}\] 其

NEFU 503 矩阵求解 (非01异或的高斯消元)

题目链接 中文题,高斯消元模板题. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> #include <ctime> using namespace std;