이름
시간 N $ 행렬의 N $ \ 역행렬을 찾는. 답 $ 10 $ ^ 9 + 7 모듈로. 출력 "아니오 솔루션"되돌릴 수 없습니다합니다.
분석
선형 대수학 기술, 역행렬 A,
다만이 항등 행렬이되는 행렬 A의 오른쪽 차 변환에 추가 할 권리 역행렬은 A.
간단한 증거 : $ AE \의 우측으로 향하는 화살표 E {A} '$
코드
//에서 https://blog.csdn.net/qq_43653202/article/details/99976316
사용법 #include <iostream> #INCLUDE <cstdio> #INCLUDE <cmath> #DEFINE 재 등록 #DEFINE 인라인 IL # 정의 긴 긴 것이다 사용 스페이스 성병; IL)는 (판독 버리는 { LL에 S = 0 , F = 0 ; 숯 C = getchar가 (); 반면 (c < ' 0 ' || C> ' 9 ' ) F = (c == ' - ' ), C = getchar가 (); 반면 (> C = ' 0 ' && C <= '' ) = S (S << 3 ) + ((S) << 1 ) + (C ^ ' 0 ' ), C = getchar가 (); 돌아 F를 - 들 : S; } CONST의 INT N = 405 , 개조 1E9 + = 7 ; INT의 N; LL A [N] [N << 1 ]; 일리노이 LL의 qpow (LL의 X, LL의 K) { LL ANS = 1 ; 하면서 (K) { 경우 (K & 1 ) = ANS ANS * X % 개조; X = X * X %의 모드; K >> = 1 ; } 반환 ANS %의 모드를; } IL 공극 Gauss_j () { 위한 (재 int로 I = 1 , R2를, 난 = <N; ++ I) { R = I; 위한 (재 INT J = 나 + 1 , J <= N; ++ j)의 경우 (a [J] [i]는>은 [R] [I]) R = J; 만약 (! R = I) 스왑 (a [i]를, A [R]); 경우 {풋 ((A [i]를 [I]!) " 해결책 " ); 반환 } INT KK = qpow (a [i]를 [I] mod- 2 ); // 求逆元 에 대한(재 INT K = 1이다. ] K <= N-; ++ K) { IF (K == I) 계속해서 , INT의 P의 A = [K] [I] * KK % MOD; 위한 (재 INT J = I, J를 <= (N - << 1이다. ) ++ J) A [K] [J] = ((A [K] [J] -p * A [I] [J]) + MOD % MOD) % MOD; } 위한 (재 INT J = 1. , J <= (N - << 1이다. ); J ++) A [I] [J] = (A [I] [J] * % KK MOD는) // 현재 행 경우 업데이트 여기에 직접 배치로서, 최종 역원 다시 탐색 시간 } 을위한 (재 INT I = . 1; 나는 <= N; ++ I) { 위한 (재 INT J = N + 1 , J <(N << 1 ) + J)의 printf ( " %의 LLD를 " , A [i]를 [J]); 의 printf ( " % LLD \ 없음 " , A [i]를 [N << 1 ]); } } 값 int () {메인 N = 판독 (); 위한 (재 int로 I = 1 ; i가 = N <; ++ I) 에 대한 (재 INT J = 1 ; J <= N; ++ j)의 A [i]를 [J] 판독 = (), A [i]를 = [내가 N +] 1 ; Gauss_j (); 반환 0 ; }