日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2018华南理工大学程序设计竞赛 H-对称与反对称

發(fā)布時(shí)間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018华南理工大学程序设计竞赛 H-对称与反对称 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

H-對(duì)稱與反對(duì)稱

題目描述

給出一個(gè)N*N的方陣A。構(gòu)造方陣B,C:
使得A = B + C.其中 B為對(duì)稱矩陣,C為反對(duì)稱矩陣。
對(duì)于方陣S中的任意元素,若(S)ij = (S)ji,則稱S為對(duì)稱矩陣
對(duì)于方陣T中的任意元素,若(T)ij = -(T)ji,則稱T為反對(duì)稱矩陣
注意,所有運(yùn)算在模M意義下

輸入描述:

輸入包含多組數(shù)據(jù),處理到文件結(jié)束
每組數(shù)據(jù),第一行包含兩個(gè)正整數(shù)N,M(1 <= N <= 1000, 1 <= M <= 1000,000,001)分別表示方陣大小與模數(shù),其中M必定為奇數(shù)。
接下來的N行,每行有N個(gè)非負(fù)整數(shù),表示方陣A(0<=A ij<=1000,000,000)。

輸出描述:

對(duì)于每組數(shù)據(jù),將反對(duì)稱矩陣$C$在$N$行中輸出;
若不存在解,則輸出"Impossible";
若存在多解,則輸出任意解。 示例1

輸入

2 19260817 0 1 1 0

輸出

0 0 0 0

思路:任意的矩陣A,必定存在對(duì)稱矩陣(A+A^T)/2和反對(duì)稱矩陣(A-A^T)/2;
坑點(diǎn)在于運(yùn)算是在模運(yùn)算意義下的,并且(A-A^T)/2的每一個(gè)元素都是分?jǐn)?shù),對(duì)分?jǐn)?shù)求模運(yùn)算,除2可以當(dāng)作是乘2的逆元2^-1,即(A-A^T)/2%MOD等價(jià)于(A-A^T)*(2^-1)%MOD。
AC代碼: #define _CRT_SECURE_NO_DEPRECATE #include <iostream> #include<vector> #include<algorithm> #include<cstring> #include<bitset> using namespace std; #define N_MAX 21 #define M_MAX 21 #define MOD 1000000009 #define INF 0x3f3f3f3f typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat;int n;ll m;ll mod; mat sum(mat &A) {mat C(A.size(), vec(A.size()));for (int i = 0; i < n;i++) {for (int j = 0; j < n;j++) {C[i][j] = ((A[i][j] -A[j][i])*m%mod+mod)%mod;}}return C; } int e_gcd(int a,int b,int &x,int &y){if(b==0){x=1;y=0;return a;}int ans=e_gcd(b,a%b,x,y);int temp=x;x=y;y=temp-a/b*y;return ans; } int mod_inverse(int a,int m){int x,y;e_gcd(a,m,x,y);return (m+x%m)%m; }int main() {while(scanf("%d%lld",&n,&mod)!=EOF) {m=mod_inverse(2,mod);mat A(n, vec(n));for (int i = 0; i < n;i++) {for (int j = 0; j < n; j++) {scanf("%lld",&A[i][j]);}}mat C = sum(A);for (int i = 0; i < C.size();i++) {for (int j = 0; j < C.size();j++) {printf("%lld%c",C[i][j],j+1==C.size()?'\n':' ');}}}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/ZefengYao/p/8799296.html

總結(jié)

以上是生活随笔為你收集整理的2018华南理工大学程序设计竞赛 H-对称与反对称的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。