题意
给一个矩阵,是对初始为0的矩阵做若干次对某一行或某一列的所有元素同时加上一个值的操作后得到的,其中有一个位置被隐藏,问隐藏的值。
题解
假设第i行被加的值为Ai,第i列被加的值为Bi,这样只需要对某一行和某一列差分,就可以得到数列A和B的差值数组,然后对左上角或右下角加上或减去值即可。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int a[1010][1010]; 5 6 int main() 7 { 8 int n; 9 scanf("%d", &n); 10 int sx(0), sy(0); 11 for (int i = 0; i < n; ++i) 12 for (int j = 0; j < n; ++j) 13 { 14 scanf("%d", &a[i][j]); 15 if (a[i][j] == -1) 16 sx = i, sy = j; 17 } 18 if (sx != 0 && sy != 0) 19 printf("%d ", a[0][sy] + a[sx][0] - a[0][0]); 20 else 21 { 22 if (sx == 0 && sy == 0) 23 printf("%d ", a[n - 1][0] + a[0][n - 1] - a[n - 1][n - 1]); 24 else 25 if (sx == 0) 26 printf("%d ", a[1][sy] + a[0][0] - a[1][0]); 27 else 28 if (sy == 0) 29 printf("%d ", a[sx][1] + a[0][0] - a[0][1]); 30 } 31 32 return 0; 33 }