当前位置: 首页 > news >正文

UVa 684 Integral Determinant

题目描述

给定一个整数方阵(大小n≤30n \le 30n30),求其行列式。要求使用整数运算,避免浮点误差。输出每个行列式的值,最后输出一个单独的*表示结束。

输入格式

多组数据。每组第一行为一个整数nnnn>0n > 0n>0),表示矩阵大小。接下来nnn行,每行nnn个整数,为矩阵元素。输入以n=0n = 0n=0结束。

输出格式

对于每个矩阵,输出一行行列式的值。最后输出一行*

样例

输入

2 5 2 3 4 3 2 3 5 1 6 7 4 8 9 0

输出

14 -27 *

题目分析

本题要求用整数运算计算行列式。直接按定义展开是O(n!)O(n!)O(n!),不可行。使用高斯消元法(将矩阵化为上三角)可以O(n3)O(n^3)O(n3)完成,但涉及除法,而本题要求整数精度,不能使用浮点数。因此需要使用模意义下的高斯消元整数高斯消元(使用欧几里得算法进行行变换,避免除法)。

代码中采用了一种变种:通过行交换和行倍加,将矩阵化为上三角,并利用最小非零元作为主元,逐步消去。由于矩阵元素可能为负数,先对行取符号使主元为正,然后通过行倍加(减去主元的倍数)消去下方元素。若主元不为111,则通过交换找到绝对值最小的非零元,并反复进行消去直到主元变为111000

解题思路

  1. 对每一列i(从000n−2n-2n2):
    • in-1行中寻找第i列非零且绝对值最小的行,若全为零则行列式为000
    • 若该行元素为负,则整行取反,并改变符号标志。
    • 若该行不是当前行,则交换,并改变符号标志。
    • 对下方的每一行ji+1n-1),若g[j][i]非零,则计算c = g[j][i] / g[i][i],然后整行减去c倍的第i行。
    • 若主元g[i][i]不为111,且仍有下方元素非零,则重复上述过程。
  2. 最后,上三角矩阵对角线的乘积乘以符号即为行列式。

注意:该算法利用了整数除法,但必须保证整除,因此主元应尽量化为111,否则可能需要更复杂的扩展欧几里得变换。代码中通过反复操作使主元变为111,从而保证了整除。

复杂度分析

  • 高斯消元O(n3)O(n^3)O(n3)n≤30n \le 30n30,极快。

代码实现

// Integral Determinant// UVa ID: 684// Verdict: Accepted// Submission Date: 2021-12-01// UVa Run Time: 0.010s//// 版权所有(C)2021,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intn;longlongg[32][32];longlongdeterminant(){longlongr=1;for(inti=0;i<n-1;i++){intoperated=0;do{intz=-1;for(intj=i;j<n;j++){if(g[j][i]<0){for(intk=i;k<n;k++)g[j][k]*=-1;r*=-1;}if(g[j][i]==1){z=j;break;}if(g[j][i]&&(z==-1||g[j][i]<g[z][i]))z=j;}if(z==-1)return0;if(z!=i){swap(g[i],g[z]);r*=-1;}operated=0;for(intj=i+1;j<n;j++)if(g[j][i]){operated=1;longlongc=g[j][i]/g[i][i];for(intk=i;k<n;k++)g[j][k]-=c*g[i][k];}}while(operated&&g[i][i]!=1);}for(inti=0;i<n;i++)r*=g[i][i];returnr;}intmain(){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);while(cin>>n,n){for(inti=0;i<n;i++)for(intj=0;j<n;j++)cin>>g[i][j];cout<<determinant()<<'\n';}cout<<"*\n";return0;}

总结

本题通过整数高斯消元法计算行列式,避免了浮点误差。关键点包括:

  • 使用行交换和行倍加操作,保持整数运算。
  • 通过不断将主元化为111确保整除。
  • 注意符号变化(行交换和行取反都会改变行列式符号)。

该解法是行列式计算的经典整数实现,适用于n≤30n \le 30n30的规模。

http://www.jsqmd.com/news/1208878/

相关文章:

  • 鸿蒙三方库 | harmony-utils之NetworkUtil默认网络与绑定网络详解
  • Linux包管理工具YUM核心机制与实战配置
  • 运放电路设计中电阻选型的核心要点与实战技巧
  • 2026年7月最新合肥积家官方售后服务热线与网点地址查询 - 积家官方售后服务中心
  • 如何用psd2fgui一键将PSD设计稿转换为FairyGUI资源包:游戏UI开发效率提升300%
  • 【iOS】离屏渲染
  • 企业自动化选型:RPA、Workflow、Agent到底有什么区别?——深度拆解企业级AI Agent与传统自动化的技术范式演进
  • 论文里的气象数据从哪来?揭秘高水平研究背后的“数据基础设施”
  • VMware安装操作系统KylinOS V10
  • 有质量的海报灯箱广告牌怎么选?实体店老板最关心的20个采购问题全解答 - 品牌报告
  • SAM 2模型解析:医疗影像分割实战与优化
  • 望友DFX软件赋能优特科技:破解人才断层与流程割裂,实现PCBA设计零缺陷
  • CH32X035芯片U盘固件更新方案与实现
  • Claude Code安装配置与核心功能实战指南:内置浏览器与智能代码补全
  • Kimi K2.6:用自然语言调度React+Three.js+Shader工程链路
  • AI智能体开发:Harness与Loop工程的核心差异与实践
  • 第二阶段:SPI 控制器注册
  • 微信里哪个小程序能免费去水印:实测几款工具的真实体验 - 科技热点发布
  • SpringBoot双重防御体系:SpringSecurity集成XSS与SQL注入协同防护实践
  • Stable Diffusion模型瘦身终极方案,单卡3090跑动12GB SDXL-LyCORIS模型(附量化精度损失对照表)
  • 抖音去水印在线工具推荐哪个好?免费多端实测对比 - 科技热点发布
  • 突破尼龙印花瓶颈:免模压起皱浆如何重构纺织特种工艺的降本逻辑
  • MyBatis-Plus字段自动加解密实践:无侵入保护敏感数据
  • 能跨系统操作的企业级自动化工具有哪些?不依赖API的那种 | 2026主流AI Agent与超自动化方案深度解析
  • 中级爵士舞网课选择指南:如何评估难度与最大化学习效果
  • 类器官模型能否预测双抗疗效?患者来源淋巴瘤3D球状体联合空间单细胞蛋白组解析耐药机制
  • 游戏运营数据指标有哪些?从产品、数据、结算和运营支持判断
  • 信号线串联电阻的设计原理与应用场景
  • 游戏机制深度测评:僵尸4水淹场景下的行为分析与性能测试
  • 电力参数一体化计算平台V2.0