矩阵消元模板

https://vjudge.net/problem/SPOJ-DETER3

纯矩阵消元, 取模注意


import java.io.BufferedInputStream;
import java.util.Scanner;

public class sopjdeter3_矩阵消元 {

		static long[][]  c,temp;
		static long n,m,k;
		static long matrix_tree() {
			long res=1;
			int flag=1;
			for(int i=1;i<=n;i++) {
				if(c[i][i]==0){
					int flag2=0;
					for(int j=i+1;j<=n;j++) {
						if(c[j][i]!=0) {
							flag2=1;
							for(int k=i;k<=n;k++) {
								long t =c[i][k]; c[i][k]=c[j][k];c[j][k]=t;
							}
							flag*=-1;
							break;
						}
					}
					if(flag2==0) return 0;
				}
				for(int j=i+1;j<=n;j++) {
					while(c[j][i]!=0) {
						long a=c[i][i]/c[j][i];
						for(int k=i;k<=n;k++) {
							c[i][k]=(c[i][k]-a*c[j][k])%m;
							long t =c[i][k]; c[i][k]=c[j][k];c[j][k]=t;
						}
						flag*=-1;
					}
				}
			}
			res=res*flag;
			for(int i=1;i<=n;i++) {
				res*=c[i][i];
				res%=m;	
			}
			return ((res+m)%m);
		}
		public static void main(String[] args) {
			Scanner sc= new Scanner(new BufferedInputStream(System.in));
			c=new long[400][400];
			
			while(sc.hasNext()) {
				n =sc.nextInt();
				m=sc.nextInt();
				for(int i=1;i<=n;i++) {
					for(int j=1;j<=n;j++) {
						c[i][j]=sc.nextLong();
						c[i][j]%=m;
					}
				}
				System.out.println(matrix_tree());
			}
		}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值