zoukankan      html  css  js  c++  java
  • 31-对称与反对称矩阵

    链接:https://www.nowcoder.com/acm/contest/94/H
    来源:牛客网

    时间限制: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<=A
    ij
    <=1000,000,000)。

    输出描述:

    对于每组数据,将反对称矩阵$C$在$N$行中输出;
    若不存在解,则输出"Impossible";
    若存在多解,则输出任意解。
    示例1

    输入

    2 19260817
    0 1
    1 0

    输出

    0 0
    0 0

    什么是逆元,比如 ( x/y )%m 相当于 (x*y的逆元)%m

    (y*y的逆元)%mod=1

    解 :设 a[][]为原数组,b[][]为反对称矩阵,c[][]为对称矩阵 ,那么a[1][2]=A,a[2][1]=B,b[1][2]=x,b[2][1]=-x,c[1][2]=y,c[2][1]=y

    则x=(A-B)/2 , y=(A+B)/2  ,显然我们只需要x就行 ,那么(A-B)一般情况下得为偶数才行 不过既然运算在%mod下进行,那么除以2变成乘上2的逆元,显然2对于奇数m的逆元为m/2  +1 ,那么(A-B)*(m/2 +1)  %m ,显然是没有impossible的情况 

    为了防止负数输出,我们得把要输出的 h 进行这样的操作  输出 (h%m+m)%m;

    #include <bits/stdc++.h>
    using namespace std;
    long long mp[1005][1005];
    long long re[1005][1005];
    
    int main(){
    	std::ios::sync_with_stdio(false);
    	int n, m;
    	while(cin >> n >> m){
    		memset(re, 0, sizeof(re));
    		for(int i = 0; i < n; i++){
    			for(int j = 0; j < n; j++){
    				cin >> mp[i][j];
    			}
    		}
    		int niyuan = (m + 1) / 2;
    		for(int i = 0; i < n; i++){
    			for(int j = 0; j < n; j++){
    				re[i][j] = ((mp[i][j] - mp[j][i]) * niyuan % m + m) % m;
    				//题意是对每一个数组内的数求模,不需要求模后得到的数组依旧是反对称矩阵 
    			}
    		}
    		
    		for(int i = 0; i < n; i++){
    			for(int j = 0; j < n; j++){
    				if(j != 0){
    					cout << " ";
    				}
    				cout <<  re[i][j];
    			}
    			cout << endl;
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8867741.html
Copyright © 2011-2022 走看看