蓝桥杯练习系统(算法训练)ALGO-932 低阶行列式计算

资源限制

内存限制:64.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

问题描述

  给出一个n阶行列式(1<=n<=9),求出它的值。

输入格式

  第一行给出两个正整数n,p;

  接下来n行,每行n个数,表示行列式,数据保证行列式中每个数绝对值不超过2*10^9。

输出格式

  一个数表示行列式的值,答案对p取余(余数需要是非负数)。

样例输入

2 2

5 -4

2 -1

样例输出

1

部分数据范围

  对于20%的数据n<=2

  对于40%的数据n<=3

  对于100%的数据n<=9,p<=40000。

cpp 复制代码
#include<iostream>
#include<math.h>
using namespace std;
const int N=15;
int a[N][N];
int p;

long long calc(int n,int a[N][N]){
	if(n==1){
		return a[1][1];
	}else if(n==2){
		return a[1][1]*a[2][2]-a[1][2]*a[2][1];
	} 
	//利用代数余子式求行列式
	//按第一行展开
	long long sum=0;
	for(int num=1;num<=n;num++){
		if(a[1][num]!=0){//等于0就不需要计算了 
			//求代数余子式
			int b_i=1;
			int b[N][N];
			for(int i=2;i<=n;i++){
				int b_j=1;
				for(int j=1;j<=n;j++){
					if(j!=num){
						b[b_i][b_j++]=a[i][j];
					}
				}
				b_i++;
			} 
			int det=calc(n-1,b);
			
			sum+=pow(-1,1+num)*a[1][num]*det;
			sum%=p;
		}
	} 
	return sum;
}
int main(){
	int n;
	cin>>n>>p;
	for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				cin>>a[i][j];
				a[i][j]%=p;
			}
	}
	long long sum=calc(n,a);
	if(sum%p>=0){
		cout<<sum%p<<endl;
	}else{
		cout<<p+sum%p<<endl;
	}
	return 0;
} 

思路:利用代数余子式求行列式的值。

相关推荐
数字宝藏21 分钟前
15本电子书分享
职场和发展·职场发展·教育电商
Gauss松鼠会2 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
oier_Asad.Chen2 小时前
【洛谷题解/AcWing题解】洛谷P4011 孤岛营救问题/AcWing1131拯救大兵瑞恩
数据结构·笔记·学习·算法·动态规划·图论·宽度优先
逻辑君2 小时前
基于 A2C 算法的双足机器人行走控制
人工智能·深度学习·算法·机器学习·机器人
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-19 支票面额(C语言实现)
c语言·开发语言·数据结构·算法
船漏了就会沉3 小时前
状态压缩DP:小数据下的“暴力美学”
算法
你怎么知道我是队长3 小时前
计算机虚拟存储管理与页面置换算法详解
服务器·网络·算法
罗西的思考3 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 — (14)— Teacher
人工智能·笔记·深度学习·算法·机器学习
塔能物联运维4 小时前
塔能两相液冷:600W/cm²极限能力,为下一代AI芯片预留充足散热余量
人工智能·算法·两相液冷
醉城夜风~4 小时前
手撕 C++ string:从零实现一个简易字符串类
开发语言·c++·算法