對稱與反對稱

2021-08-18 08:37:48 字數 1153 閱讀 4808

對稱與反對稱

時間限制:c/c++ 2秒,其他語言4秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

題目描述 

給出乙個n*n的方陣a。構造方陣b,c:

使得a = b + c.其中 b為對稱矩陣,c為反對稱矩陣。

對於方陣s中的任意元素,若(s)ij = (s)ji,則稱s為對稱矩陣

對於方陣t中的任意元素,若(t)ij = -(t)ji,則稱t為反對稱矩陣

注意,所有運算在模m意義下

輸入描述:

輸入包含多組資料,處理到檔案結束

每組資料,第一行包含兩個正整數n,m(1 <= n <= 1000, 1 <= m <= 1000,000,001)分別表示方陣大小與模數,其中m必定為奇數。

接下來的n行,每行有n個非負整數,表示方陣a(0<=aij<=1000,000,000)。

輸出描述:

對於每組資料,將反對稱矩陣$c$在$n$行中輸出;

若不存在解,則輸出"impossible";

若存在多解,則輸出任意解。

示例1輸入

2 19260817

0 11 0

輸出0 0

0 0首先每乙個n階矩陣都可以寫成乙個對稱矩陣和乙個反對稱矩陣的和,a=(a+at)/2+(a-at)/2;

(a+at)/2為對稱矩陣,(a-at)/2為反對稱矩陣。

所以要求的反對稱矩陣的每個元素為 xij=(aij-aji)/2 ;

題目要求運算在模m的意義下,因為要除以2,所以先找2 的逆元。求逆元:( 2*x與 1% m 同餘。m為奇數,可以求出x (2的逆元)為(m+1)/2 )。負數的逆元:(負數%m+m)%m ;

#include#include#include#include#include#include#include#include#include#include#define maxn 1005

#define ll long long

#define inf 0x3f3f3f3f

using namespace std;

ll a[maxn][maxn];

ll b[maxn][maxn];

int main()

for(int i=0;i

對稱與反對稱

對稱與反對稱 根據線代書上的說法,一定存在。如果a 1 2 a,a 2 1 b,那麼我們應該求的是 a b 2和 a b 2,為了使它們為整數,那麼應該求2的逆元,根據逆元線性篩,2對m的逆元為 mod mod 2 mod.include include include include includ...

對稱和反對稱矩陣

時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 給出乙個n n的方陣a。構造方陣b,c 使得a b c.其中 b為對稱矩陣,c為反對稱矩陣。對於方陣s中的任意元素,若 s ij s ji,則稱s為對稱矩陣 對於方...

反對稱序列

1 識別讀入的字串是否是乙個 反對稱序列 反對稱序列 例 abcd dcba 特點 以 作為結束符 以 作為分隔符,且 兩側字元個數相等,順序相反 例 abc abc 或abc bc 或ab bac 都不是反對稱序列 提示 利用棧儲存讀入字元,直到 在讀入字元和棧頂元素比較 分析 和 判括號匹配演算...