EWTD

7-dumbed

Sep 18th, 2021
767
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "math"
  6.     "math/big"
  7. )
  8. func main() {
  9.     var n int
  10.     var temp int64
  11.     fmt.Scan(&n)
  12.     B := make([]big.Rat, n)
  13.     A := make([][]big.Rat, n)
  14.     for i := 0; i < n; i++ {
  15.         A[i] = make([]big.Rat, n)
  16.         for j := 0; j < n; j++ {
  17.             fmt.Scan(&temp)
  18.             A[i][j].SetInt64(temp)
  19.         }
  20.         fmt.Scan(&temp)
  21.         B[i].SetInt64(temp)
  22.     }
  23.     k := 0
  24.     max := big.NewRat(math.MinInt32,1)
  25.     eps := big.NewRat(1,100000)
  26.     var tmp *big.Rat
  27.     for k < n{
  28.         max = big.NewRat(A[k][k].Num().Int64(),A[k][k].Denom().Int64())
  29.         max.Abs(max)
  30.         index := k
  31.         for i := k+1; i < n; i++{
  32.             tmp = big.NewRat(A[i][k].Num().Int64(),A[i][k].Denom().Int64())
  33.             tmp.Abs(tmp)
  34.             if tmp.Cmp(max) == 1 {
  35.                 max = tmp
  36.                 index = i
  37.             }
  38.         }
  39.         if eps.Cmp(max) == 1{
  40.             fmt.Println("No solution")
  41.             return
  42.         }
  43.         for i := 0; i < n; i++{
  44.             A[index][i],A[k][i] = A[k][i], A[index][i]
  45.         }
  46.         B[index],B[k] = B[k], B[index]
  47.  
  48.         for i := k; i < n; i++{
  49.             tmp = big.NewRat(A[i][k].Num().Int64(),A[i][k].Denom().Int64())
  50.             if eps.Cmp(tmp.Abs(tmp)) == 1{continue}
  51.             tmp = big.NewRat(A[i][k].Num().Int64(),A[i][k].Denom().Int64())
  52.             if tmp.Cmp(big.NewRat(0,1)) != 0{tmp.Inv(tmp)}
  53.             for j := 0; j < n; j++{
  54.                 A[i][j].Mul(&A[i][j],tmp)
  55.             }
  56.             B[i].Mul(&B[i],tmp)
  57.             if i == k{continue}
  58.             for j := 0; j < n; j++ {A[i][j].Sub(&A[i][j],&A[k][j])}
  59.             B[i].Sub(&B[i],&B[k])
  60.         }
  61.         k++
  62.     }
  63.     var buffer []string
  64.     for i := n-1; i >= 0; i--{
  65.         buffer = append(buffer, B[i].String())
  66.         for j := 0; j < i; j++{
  67.             tmp = big.NewRat(A[j][i].Num().Int64(),A[j][i].Denom().Int64())
  68.             tmp.Mul(tmp,&B[i])
  69.             B[j].Sub(&B[j],tmp)
  70.         }
  71.     }
  72.     for len(buffer) != 0{
  73.         l := len(buffer)
  74.         fmt.Println(buffer[l-1])
  75.         buffer = buffer[:l-1]
  76.     }
  77.  
  78. }
  79.  
RAW Paste Data