#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: