對稱與反對稱
時間限制: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 都不是反對稱序列 提示 利用棧儲存讀入字元,直到 在讀入字元和棧頂元素比較 分析 和 判括號匹配演算...