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个未知数乘以各自系数后的加和。(保证有唯一整数解)

输出格式

一行N个数,表示第1到N个未知数的值。

模板题!

 1 #include<algorithm>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 double a[2005][2005];
 7 int n;
 8 int gcd(int a,int b){
 9     if (b==0) return a;
10     else return gcd(b,a%b);
11 }
12 void gauss(){
13     int now=1,to,ggcd;
14     double t;
15     for (int i=1;i<=n;i++){
16         for (to=now;to<=n;to++) if (a[to][i]!=0) break;
17         if (to>n) continue;
18         if (to!=now) for (int j=1;j<=n+1;j++) std::swap(a[to][j],a[now][j]);
19         t=a[now][i];
20         for (int j=1;j<=n+1;j++) a[now][j]/=t;
21         for (int j=1;j<=n;j++)
22          if (j!=now){
23                 t=a[j][i];
24                 for (int k=1;k<=n+1;k++)
25                  a[j][k]-=t*a[now][k];
26          }
27         now++;
28     }
29 }
30 int main(){
31     scanf("%d",&n);
32     for (int i=1;i<=n;i++){
33         for (int j=1;j<=n+1;j++)
34          scanf("%lf",&a[i][j]);
35     }
36     gauss();
37     for (int i=1;i<=n;i++)
38      printf("%d ",(int)round(a[i][n+1]));
39 }
时间: 2024-10-13 12:04:23

VIJOS 1052贾老二算算术 (高斯消元)的相关文章

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

#include <stdio.h> int main() { puts("转载请注明出处谢谢"); puts("http://blog.csdn.net/vmurder/article/details/43445323"); } 题解: 虽然是说有唯一解,但是依然需要在消到某一层时判0/非0,然后适当交换位置. 代码: #include <cstdio> #include <cstring> #include <iostr

UVa 10828 Back to Kernighan-Ritchie 高斯消元+概率DP

题目来源:UVa 10828 Back to Kernighan-Ritchie 题意:从1开始 每次等概率从一个点到和他相邻的点 有向 走到不能走停止 求停止时每个点的期望 思路:写出方程消元 方程有唯一解 多解 无解的情况 有环 一直再环里无法停止算无穷大 从1不能到的点期望为0 #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <

【高斯消元】兼 【期望dp】例题

[总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $              X_2 + 2X_3 = 1$ $2X_1 + X_3 = 0$ 化为矩阵为:--->----->-----> 然后就可以通过最后一行直接求出$X_3 = ...$,将其带回第二行,算出$X_2$,同理算出$X_1$. 代码很好理解: inline void gauss(){ int

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

BZOJ 3143 HNOI2013 游走 高斯消元 期望

这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数.当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和. 现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小. 输出最小的总分期望值. Solution: 这题贪心很明显

hdu 5955 Guessing the Dice Roll 【AC自动机+高斯消元】

hdu 5955 Guessing the Dice Roll [AC自动机+高斯消元] 题意:给出 n≤10 个长为 L≤10 的串,每次丢一个骰子,先出现的串赢,问获胜概率. 题解:裸的AC自动机,求匹配到终止结点的概率,用 高斯消元?一开始不知道怎么建方程组,直接举个例子吧: Input: 1 2 2 1 1 2 1 图解: x0原本概率就是1,然后还要加上其他结点走向它的概率,,这样最后算下来是大于1的,现在还是觉得怪怪的... 1 #include <cstdio> 2 #inclu

2016 CCPC 网络赛 B 高斯消元 C 树形dp(待补) G 状压dp+容斥(待补) H 计算几何

2016 CCPC 网络赛 A - A water problem 水题,但读题有个坑,输入数字长度很大.. B - Zhu and 772002 题意:给出n个数(给出的每个数的质因子最大不超过2000),选出多个数相乘得b.问有多少种选法让b 为完全平方数. tags:高斯消元,求异或方程组解的个数.   好题 每个数先素数分解开.  对于2000以内的每个素数p[i],这n个数有奇数个p[i]则系数为1,偶数个则系数为0,最后n个数的p[i]系数异或和都要为0才会使得最后的积为完全平方数.

HDU 4870 Rating(高斯消元 )

HDU 4870   Rating 这是前几天多校的题目,高了好久突然听旁边的大神推出来说是可以用高斯消元,一直喊着赶快敲模板,对于从来没有接触过高斯消元的我来说根本就是一头雾水,无赖之下这几天做DP,正好又做到了这个题,没办法得从头开始看,后来在网上找了别人的高斯消元的模板后发现其实也还是很好理解,就是先构造一个增广矩阵,然后化行阶梯形,最后迭代求解 首先有一个介绍高斯消元感觉过于详细的博客http://blog.csdn.net/tsaid/article/details/7329301 首

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

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