zoukankan      html  css  js  c++  java
  • SPOJ

    Find The Determinant III

    题目链接:https://vjudge.net/problem/SPOJ-DETER3

    Description:

    Given a NxN matrix A, find the Determinant of A % P.

    Input:

    Multiple test cases (the size of input file is about 3MB, all numbers in each matrix are generated randomly).

    The first line of every test case contains two integers , representing N (0 < N < 201) and P (0 < P < 1,000,000,001). The following N lines each contain N integers, the j-th number in i-th line represents A[i][j] (- 1,000,000,001 < A[i][j] < 1,000,000,001).

    Output:

    For each test case, print a single line contains the answer.

    Sample Input:

    1 10
    -528261590
    2 2
    595698392 -398355861
    603279964 -232703411
    3 4
    -840419217 -895520213 -303215897
    537496093 181887787 -957451145
    -305184545 584351123 -257712188

    Sample Output:

    0
    0
    2

    题意:

    求解行列式模上p的值。

    题解:

    主要了解下行列式的性质就行了:https://www.cnblogs.com/GerynOhenz/p/4450417.html

    之后就类似于高斯消元去计算,代码如下:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    const int N = 205;
    int n;
    ll p ;
    ll b[N][N];
    ll Det(int n){
        int i,j,k;
        ll ret = 1;
        for(i=1;i<=n;i++){
            for(j = i+1;j <= n;j++){
                while(b[j][i]){ 
                    ll tmp=b[i][i]/b[j][i];
                    for(k = i;k <= n;k++)
                        b[i][k] =((b[i][k] - tmp*b[j][k])%p+p)%p;
                    swap(b[i],b[j]);
                    ret = -ret;
                }
            }
            if(!b[i][i]) return 0;
            ret = ret*b[i][i]%p;
        }
        if(ret < 0) ret = ret+p;
        return ret;
    }
    int main(){
        while(scanf("%d%lld",&n,&p)!=EOF){
            memset(b,0,sizeof(b));
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    cin>>b[i][j];
                }
            }
            cout<<Det(n)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Programming Contest Ranking(题解)
    Alphabet Cookies
    hpu 1267 Cafeteria (01背包)
    Triangles 正多边形分割锐角三角形
    ACdream 1067:Triangles
    hdu 1253 胜利大逃亡 (代码详解)解题报告
    最短路
    POJ- 1511 Invitation Cards
    E
    HDU
  • 原文地址:https://www.cnblogs.com/heyuhhh/p/10392732.html
Copyright © 2011-2022 走看看