2107: Spoj2832 Find The Determinant III

Time Limit: 1 Sec  Memory Limit: 259 MB
Submit: 154  Solved: 46
[Submit][Status][Discuss]

Description

Problem code: DETER3

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

给出一个尺寸为N×N的整数方阵A(N≤200),要求求出|A|%P的值(即A的行列式的值除以P的余数)。方阵中的数与P均为32位有符号类型可容纳的整数

Input

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

3 4
-840419217 -895520213 -303215897
537496093 181887787 -957451145
-305184545 584351123 -257712188

Sample Output

2

  其实一说算法名称大概都会做了吧。高斯消元的除法本质上等效与辗转相处法,而辗转相处不存在精度误差。我们为了把两行之一消掉,通过辗转相除大行减小行变成类似子问题。

  最开始尝试用java的BigDecimal,结果发现精度和时间是不可同时满足的。

  矩阵行列式求法可几何理解,向量(基底)可以互相加减,而不影响体积,然而基底互换,有向体积取反。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 210
typedef long long qword;
qword mat[MAXN][MAXN]; int main()
{
//freopen("input.txt","r",stdin);
int n,m,x,y,z;
int mod;
while (~scanf("%d%d",&n,&mod))
{
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++)
{
scanf("%lld",&mat[i][j]);
mat[i][j]%=mod;
}
}
int rev=;
for (int i=;i<=n;i++)
{
x=-;
for (int j=i;j<=n;j++)
{
if (mat[j][i])
{
x=j;
break;
}
}
if (x==-)break;
if (x!=i)
{
for (int j=;j<=n;j++)
swap(mat[x][j],mat[i][j]);
rev=-rev;
}
if (!mat[i][i])break;
for (int j=i+;j<=n;j++)
{
while (mat[i][i])
{
qword t=mat[j][i]/mat[i][i];
for (int k=;k<=n;k++)
mat[j][k]=(mat[j][k]-mat[i][k]*t)%mod;
for (int k=;k<=n;k++)
swap(mat[j][k],mat[i][k]);
rev=-rev;
}
for (int k=;k<=n;k++)
swap(mat[j][k],mat[i][k]);
rev=-rev;
}
}
qword ans=;
for (int i=;i<=n;i++)
ans=ans*mat[i][i]%mod;
ans=(ans*rev+mod)%mod;
printf("%lld\n",ans);
}
}

bzoj 2107: Spoj2832 Find The Determinant III 辗转相除法的更多相关文章

  1. SPOJ - Find The Determinant III 计算矩阵的行列式答案 + 辗转相除法思想

    SPOJ -Find The Determinant III 参考:https://blog.csdn.net/zhoufenqin/article/details/7779707 参考中还有几个关于 ...

  2. SPOJ - DETER3:Find The Determinant III (求解行列式)

    Find The Determinant III 题目链接:https://vjudge.net/problem/SPOJ-DETER3 Description: Given a NxN matrix ...

  3. BZOJ 1803 Query on a tree III

    树上主席树. 我靠这是第k小吧..... #include<iostream> #include<cstdio> #include<cstring> #includ ...

  4. 【BZOJ】 Hash Killer I II III

    前言 这里只是一个整理... Solution Hash Killer I Hash Killer II

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. KUANGBIN带你飞

    KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题    //201 ...

  7. kuangbin带你飞 生成树专题 : 次小生成树; 最小树形图;生成树计数

    第一个部分 前4题 次小生成树 算法:首先如果生成了最小生成树,那么这些树上的所有的边都进行标记.标记为树边. 接下来进行枚举,枚举任意一条不在MST上的边,如果加入这条边,那么肯定会在这棵树上形成一 ...

  8. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

  9. ACM--[kuangbin带你飞]--专题1-23

    专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 FliptilePOJ 1426 Find T ...

随机推荐

  1. android自定义View之钟表诞生记

    很多筒子觉得自定义View是高手的象征,其实不然.大家觉得自定义View难很多情况下可能是因为自定义View涉及到了太多的类和API,把人搞得晕乎乎的,那么今天我们就从最简单的绘图API开始,带大家来 ...

  2. Android_ImageView

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  3. oracle数据库入门sql语句

    数据库: 命名规范问题 依然是 _流.看来也确实应该抽空 来处理一下 今天吧,不行时间不能浪费.要更加专注.累了 就睡,醒来 就 好好 弄东西.白天 哪怕累一些,强度 大一些,晚上也可以抽空出去.溜溜 ...

  4. nyoj 2 括号配对问题

    括号配对问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0& ...

  5. mysql自增

    主键设置自增,同时主键需要是int类型

  6. .net开发---自定义页面打印区域

    自定义页面打印区域 有3种办法: 办法一:将不需要打印的部位隐藏掉 Examp: <%-- (1)使用css样式,定义一个.noprint的class,将不打印的内容放入这个class内. -- ...

  7. 09.13随笔2014年9月13日22:32:38,奶爸的英语教室,groovy

    我们这里只推荐一本语法书:台湾的旋元佑老师写的<文法俱乐部>(简体版名为<语法俱乐部>).这本书因为出版社倒闭而绝版,淘宝可以买到影印的版本. (1)学英语到 奶爸的英语教室  ...

  8. C# 利用TextBox的Text属性实现换行加字符 "\r\n"

    要让一个TextBox显示多行文本就得把它的Multiline属性设置为true,可是如果你是要把TextBox的Text属性设置多行文本时,换行符由两个字符组成:"\r\n". ...

  9. mini2440移植uboot-2008.10 遇到的问题

    1.mkimage的使用(u-boot-2008.10/tools/mkimage) 首先./mkimage 运行或者 将mkimage 拷贝到 /bin 目录下面 法一: #mkimage -n ' ...

  10. Kali linux网络配置

    Kali linux 安装完成后,需要对其网络进行配置.使用DHCP服务是配置网卡最简单的方法之一,但渗透测试时通常不会这样做,因为系统会被记录在DHCP服务器的数据库中. 1  动态DHCP方式 配 ...