#P1339. 第1题-矩阵的转置权值
第1题-矩阵的转置权值
Related
In following contests:
最终矩阵位置(i,j)的值就是原矩阵matrix中∣matrix[i][j]−matrix[j][i]∣
对角线处的元素作差之后的权值则为0
O(nm)
C++
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int a[505][505];
int Abs(int x,int y){
return x>y ? x-y : y-x;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
scanf("%d",&a[i][j]);
}
}
int ans=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
ans+=Abs(a[i][j],a[j][i]);
}
}
printf("%d",ans);
return 0;
}
python代码
import sys
input = sys.stdin.readline
n = int(input())
data = []
for _ in range(n):
data.append([int(x) for x in input().strip().split()])
ans = 0
for i in range(n):
for j in range(i + 1, n):
ans += abs(data[i][j] - data[j][i])
print(ans * 2)
Java代码
import java.util.Scanner;
public class Main {
public static int n;
public static int[][] a = new int[505][505];
public static int Abs(int x, int y) {
return x > y ? x - y : y - x;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
a[i][j] = scanner.nextInt();
}
}
int ans = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
ans += Abs(a[i][j], a[j][i]);
}
}
System.out.println(ans);
}
}
小明是个数学家,数学家就喜欢下定义。
这天,小明想要获得一个新的矩阵计算方法,于是他定义一个名称“转置权值",是矩阵的所有元素减去转置矩阵对应位置上元素的绝对值之和。
但是一个个算太慢了,于是小明找到了擅长编程的小红。
为了使小红明白,小明举了个例子,矩阵A为:
4231矩阵A的转置矩阵是:
4321所以上述矩阵的转置权值是[4−4]+[3−2]+[2−3]+[1−1]=2。
现在小明拿到了一个 n∗n 的矩阵,你能帮他完成这次计算吗?
输入第一行一个正整数 n ,代表矩阵的大小。
接下来的 n 行,每行 n 个正整数 ,用来表示矩阵。
1≤n≤500,1≤aij≤1000
输出一个整数,代表该矩阵转置权值的值。
样例输入
2
4 3
2 1
样例输出
2
In following contests: