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

H-对称与反对称

题目描述

给出一个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

思路:任意的矩阵A,必定存在对称矩阵(A+A^T)/2和反对称矩阵(A-A^T)/2;坑点在于运算是在模运算意义下的,并且(A-A^T)/2的每一个元素都是分数,对分数求模运算,除2可以当作是乘2的逆元2^-1,即(A-A^T)/2%MOD等价于(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;
}

原文地址:https://www.cnblogs.com/ZefengYao/p/8799296.html

时间: 2024-09-30 02:00:38

2018华南理工大学程序设计竞赛 H-对称与反对称的相关文章

C 六学家的困惑 【YY】 (2019年华南理工大学程序设计竞赛(春季赛))

冲鸭,去刷题:https://ac.nowcoder.com/acm/contest/625/C 小六喜欢两全其美的事情,今天就正好有一个这样的机会. 小六面前有两根管子,管子里面放满了数字为1到9的小球.每次取球时,小六会先选择一根管子,再从这根管子的某一侧(左侧或右侧)取出一个球.在满足取球规则的情况下,他可以任意顺序取出所有小球.假如小六依次取出的球的编号为a1,a2,?,ana1,a2,?,an,则他最后就得到了一个形如¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯a1a2?ana1a

2019年华南理工大学程序设计竞赛(春季赛)A NB群友

https://ac.nowcoder.com/acm/contest/625/A 题意:给出一个区间范围 , 求有多少个数的每一位的积是在这个区间里面的 分析:没错了 ,就是记忆化暴力搜索 ,不断的枚举除 i ,i是2到9 , 看是否合法 ,  对于枚举到相同的状态的时候 , 后面的价值肯定和上一个状态是一样的 , 所以这样就好拉 #include<bits/stdc++.h> using namespace std; #define ll long long map<ll , ll

2019年华南理工大学程序设计竞赛(春季赛) K Parco_Love_String(后缀自动机)找两个串的相同字串有多少

https://ac.nowcoder.com/acm/contest/625/K 题意: 给出Q 个询问 i , 求 s[0..i-1] 与 s[i...len-1] 有多少相同的字串 分析: 给出了查询 , 容易想到先预处理出答案好吧 , 字符串的问题也容易想到后缀自动机 ,但是我们该怎么使用呢? 下面提供我的思路: 我们建立出SAM后 , 跑一边拓扑排序 ,根据SAM跑出来的拓扑排序的序列特性 , 我们可以求出 在当前状态st 的最大串字符出现的个数 for (int i = now; i

HDU6447 YJJ&#39;s Salesman 2018中国大学生程序设计竞赛 - 网络选拔赛1010 离散化+线段树+DP

YJJ's Salesman Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 253    Accepted Submission(s): 62 Problem Description YJJ is a salesman who has traveled through western country. YJJ is always on

2018中国大学生程序设计竞赛 - 网络选拔赛 1010 YJJ&#39;s Salesman 【离散化+树状数组维护区间最大值】

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6447 YJJ's Salesman Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 919    Accepted Submission(s): 290 Problem Description YJJ is a salesman who h

2018清华大学学生程序设计竞赛暨高校邀请赛

2018清华大学学生程序设计竞赛暨高校邀请赛 A. 绿绿与串串 solution 生成字符串的方式决定了:当字符串中的某个奇回文串的左端为开头,或右端为结尾时,这个奇回文串的中间的位置就是其中一个长度. 时间复杂度:\(O(n)\) B. 赛艇 solution 将路径也弄成一个矩阵,然后压位判断. 时间复杂度:\(O(\frac{1}{64}n^2m^2)\) F. 密码学第三次小作业 solution 一看它给了两个式子就知道不是暴力分解质因子. 中间有一个很特别的性质:\((e_1, e_

&quot;字节跳动杯&quot;2018中国大学生程序设计竞赛-女生专场 Solution

A - 口算训练 题意:询问 $[L, R]$区间内 的所有数的乘积是否是D的倍数 思路:考虑分解质因数 显然,一个数$x > \sqrt{x} 的质因子只有一个$ 那么我们考虑将小于$\sqrt {x}$ 的质因子用线段树维护 其他质因子用vector 维护存在性 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define N 100010 5 #define block 317 6 vector <int>

2017-5-19-Train:2017年浙江理工大学程序设计竞赛校赛

Problem A: 回文(签到题) Description 小王想知道一个字符串是否为ABA’型字符串.ABA’型字符串的定义:S=ABA’,A,B,A’都是原字符串的子串(不能是空串),A’的意思是A的反转串,B不一定要和A或A’不同.符合ABA’型的例如:"aba”,"acbbca”,"abcefgcba”等."Abcefgcba”是ABA’型,因为它能找到一组对应的A("abc”),B(”efg”)和A’("cba")满足定义.

2015年浙江理工大学程序设计竞赛

做了两题 Problem D: 逻辑运算 Description 还记得大学里学过的模电么,今天就让我们将与或非变成一道题吧. 给你一个与或非的表达式,求出这个表达式的值,表达式总共有八种字符. 三种逻辑运算符按照优先级排列如下. ‘!’:表示取反. ‘&’:逻辑与. ‘|’:逻辑或. 两个字符‘T’,‘F‘分别表示true和 false. 另外还有左右括号,空格三种字符.跟一般的表达式一样,括号可以改变优先级. Input 每组数据输入一行字符串,字符串长度小于等于100. Output 输出