java高斯消元模板
//package fuc; import java.io.PrintStream;
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String[] args) {
new Task().main();
}
}
class frac{
BigInteger a,b;
frac(){
a=BigInteger.ZERO;
b=BigInteger.ONE;
}
frac(BigInteger a,BigInteger b){
this.a=a;
this.b=b;
}
frac sub(frac t){
BigInteger p, q, d;
p = a.multiply(t.b);
p = p.subtract(t.a.multiply(b));
q = b.multiply(t.b);
d = p.gcd(q);
p = p.divide(d);
q = q.divide(d);
return new frac(p, q);
}
frac add(frac t){
BigInteger d, p, q;
p = a.multiply(t.b);
p = p.add(t.a.multiply(b));
q = b.multiply(t.b);
d = p.gcd(q);
p = p.divide(d);
q = q.divide(d);
return new frac(p, q);
}
frac div(frac t) {
BigInteger p, q, d;
p = a.multiply(t.b);
q = b.multiply(t.a);
d = p.gcd(q);
p = p.divide(d);
q = q.divide(d);
return new frac(p, q);
}
frac mul(frac t) {
BigInteger p, q, d;
p = a.multiply(t.a);
q = b.multiply(t.b);
d = p.gcd(q);
p = p.divide(d);
q = q.divide(d);
return new frac(p, q);
}
frac abs() {
return new frac(a.abs(), b.abs());
}
int compareTo(frac t) {
t = this.sub(t);
return t.a.compareTo(BigInteger.ZERO);
}
boolean zero() {
return a.equals(BigInteger.ZERO);
}
}
class Task{ Scanner cin = new Scanner(System.in);
PrintStream cout = System.out;
BigInteger ONE= BigInteger.ONE;
BigInteger ZERO=BigInteger.ZERO;
frac[][] a = new frac[211][211];
frac[] x = new frac[211];
frac t;
frac zero=new frac(ZERO,ONE);
frac r,one =new frac(ONE,ONE);
boolean gauss(int n){
int i,j,k,row;
for(i=1;i<=n;i++){
row=i;
for (j=i+1;j<=n;j++){
if (a[row][i].abs().compareTo(a[j][i].abs())<0){
row = j;
}
}
if (a[row][i].compareTo(zero)==0){
return false;
}
if (row!=i){
for (k=i;k<=n;k++){
t=a[row][k];
a[row][k]=a[i][k];
a[i][k]=t;
}
t=x[row];
x[row]=x[i];
x[i]=t;
}
for (j=i+1;j<=n;j++){
r=a[j][i].div(a[i][i]);
a[j][i]=zero;
for (k=i+1;k<=n;k++){
a[j][k]=a[j][k].sub(r.mul(a[i][k]));
}
x[j]=x[j].sub(r.mul(x[i]));
}
}
for (i=n;i>=1;i--){
for (j=i-1;j>=1;j--){
r=a[j][i].div(a[i][i]);
a[j][i]=zero;
x[j]=x[j].sub(r.mul(x[i]));
}
}
for (i=1;i<=n;i++){
x[i]=x[i].div(a[i][i]);
}
return true;
} void main(){
int n,i,j;
while(cin.hasNext()){
n = cin.nextInt();
for (i=1; i<= n; ++i){
for (j=1; j<=n; ++j){
a[i][j]=new frac(cin.nextBigInteger(),ONE);
}
x[i]=new frac(cin.nextBigInteger(),ONE);
}
if (!gauss(n)){
cout.println("No solution.");
}
else{
for (i=1;i<=n;i++){
if (x[i].b.compareTo(ZERO)<0){
x[i].a=x[i].a.negate();
x[i].b=x[i].b.negate();
}
}
for (i=1;i<=n;i++){
cout.print(x[i].a);
if (x[i].b.compareTo(ONE)!=0){
cout.print("/"+x[i].b);
}
cout.println();
}
}
cout.println();
}
} }
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2449
java高斯消元模板的更多相关文章
- 高斯消元模板!!!bzoj1013
/* 高斯消元模板题 n维球体确定圆心必须要用到n+1个点 设圆心坐标(x1,x2,x3,x4...xn),半径为C 设第i个点坐标为(ai1,ai2,ai3,,,ain)那么对应的方程为 (x1-a ...
- HDU 3359 高斯消元模板题,
http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...
- 【Luogu】P3389高斯消元模板(矩阵高斯消元)
题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 ;i<=n;++i) ;j<=n+;++j) scanf("%lf",&s[i][j]) ...
- 【转】高斯消元模板 by kuangbin
写的很好,注释很详细,很全面. 原blog地址:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html #include< ...
- kuangbin大佬的高斯消元模板
dalao解释的博客 #include <bits/stdc++.h> using namespace std; ; int a[MAXN][MAXN];//增广矩阵 int x[MAXN ...
- 高斯消元模板(pascal)
洛谷P3389评测 program rrr(input,output); const eps=1e-8; var a:..,..]of double; n,i,j,k:longint; t:doubl ...
- hdu5955 Guessing the Dice Roll【AC自动机】【高斯消元】【概率】
含高斯消元模板 2016沈阳区域赛http://acm.hdu.edu.cn/showproblem.php?pid=5955 Guessing the Dice Roll Time Limit: 2 ...
- NEFU 503 矩阵求解 (非01异或的高斯消元)
题目链接 中文题,高斯消元模板题. #include <iostream> #include <cstdio> #include <cmath> #include ...
- hdu4418(概率dp + 高斯消元)
应该是一个入门级别的题目. 但是有几个坑点. 1. 只选择x能到达的点作为guass中的未知数. 2. m可能大于n,所以在构建方程组时未知数的系数不能直接等于,要+= 3.题意貌似说的有问题,D为- ...
随机推荐
- Android编程使用httpHelper不执行错误-20171017
解决方法:将显示等代码(例如setText()和setAdapter()等方法)从主函数onCreate()中移到httpHelper.get()函数中: 原因:有可能是主线程运行的较快,而连接服 ...
- k8s资源对象及API群组
REST是representational state transfer的缩写,意为“表征状态转移”,它是一种程序架构风格,基本元素为资源(resource).表征(representation)和行 ...
- python进阶ing——创建第一个Tornado应用
python进阶ing——创建第一个Tornado应用 分类: Python2013-06-02 23:02 1725人阅读 评论(2) 收藏 举报 pythonTornado 每天在群里跟很多群友讨 ...
- 基于树莓派2代的DIY无线路由器
最近手上多了一个树莓派2代,于是折腾就这么开始了. 因为总是得要个显示屏或者路由器或者插根网线才能玩,有点麻烦,所以有了此文. 设备清单: 树莓派2代 EDUP EP-N8508GS无线网卡(USB) ...
- 前端接受base64的excel,点击立即下载
由于使用框架的特殊性,后台返回的文件流进行了base64加密,所以返回的是base64格式,所以需要将其转变为blob,上代码
- 1223 drf引入以及restful规范
目录 前后台的数据交互 drf 知识点概括 1. 框架安装 2. 接口 2.1 什么是接口 2.2 接口文档 2.3 接口工具的使用 2.4 restful接口规范 debug的使用 前后台的数据交互 ...
- C#生成的后台文件 ***.vshost.exe
vshost是visual studio宿主应用程序,vs运行调试时是打开的其实是这个文件,这个程序可以让vs跟踪调试信息.而exe则可以直接打开,vs不会跟踪任何这个文件的运行情况.只要引用的程序集 ...
- Java多线程和并发(十),JMM(Java内存模型)
目录 1.什么是JMM 2.JMM的主内存和工作内存 3.JMM如何解决可见性问题-指令重排序 4.Volatile 十.JMM(Java内存模型)(暂时没有理解) 1.什么是JMM 2.JMM的主内 ...
- day_work_02
day_work_02 ------Python是一个优雅的大姐姐 作业一 设计思路(四个if一个while) 首先我先把商品用列表加元组的形式保存,然后将商品遍历出来. 键盘输入薪水. (if)判断 ...
- Mybatis 结果映射下划线转驼峰
mybatis 结果映射下划线转驼峰 Spring Boot 配置: #下划线转驼峰 mybatis.configuration.map-underscore-to-camel-case=true m ...