【头脑】 矩阵(matrix)题解

火影  金牌会员 | 2024-10-20 12:13:46 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 648|帖子 648|积分 1944

题意

给定                                    n                         ×                         n                         (                         2                         ≤                         n                         ≤                         2000                         )                              n \times n(2 \leq n \leq 2000)                  n×n(2≤n≤2000) 的矩阵,每格中有一个权值。初始时权值全部为                                    0                              0                  0,mxjz666 对其举行若干次操作,每次选定一行或一列,对于这一行或这一列加上某个正整数,末了给你操作后的矩阵并将其中一个数字改成                                    −                         1                              -1                  −1,求这个数原来是多少
思路

等效替代,将一行(列)的多次等效看成加了一次,记第                                    i                              i                  i 行一共加上了                                              x                            i                                       x_i                  xi​,第                                    j                              j                  j 列一共加上了                                              y                            j                                       y_j                  yj​,则 更改后的数为                                              x                            i                                  +                                   y                            j                                       x_i + y_j                  xi​+yj​。记上述式子的结果为                                              a                                       i                               ,                               j                                                 a_{i,j}                  ai,j​。
不妨令                                    i                         ,                         j                         <                         0                              i,j < 0                  i,j<0,有
                                                    a                                           i                                  ,                                  j                                                 =                                       x                               i                                      +                                       y                               i                                      =                                       x                               i                                      +                                       y                               i                                      +                                       x                                           i                                  +                                  1                                                 +                                       y                                           i                                  +                                  1                                                 −                                       x                                           i                                  +                                  1                                                 −                                       y                                           i                                  +                                  1                                                 =                                       a                                           i                                  ,                                  j                                  +                                  1                                                 +                                       a                                           i                                  +                                  1                                  ,                                  j                                                 −                                       a                                           i                                  +                                  1                                  ,                                  j                                  +                                  1                                                       a_{i,j} = x_i + y_i = x_i + y_i + x_{i+1} + y_{i+1} - x_{i+1} - y_{i+1}=a_{i,j + 1} + a_{i+1,j}- a_{i+1,j+1}                     ai,j​=xi​+yi​=xi​+yi​+xi+1​+yi+1​−xi+1​−yi+1​=ai,j+1​+ai+1,j​−ai+1,j+1​
因此,有对于恣意一个边长为 2 的矩阵,都有对角相加和相称的结论。
鼎力大举分讨即可。
代码

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. int n,a[2005][2005],x,y;
  5. signed main() {
  6.         scanf("%lld",&n);
  7.         for(int i = 1;i <= n;i++) {
  8.                 for(int j = 1;j <= n;j++) {
  9.                         scanf("%lld",&a[i][j]);
  10.                         if(a[i][j] == -1) x = i,y = j;
  11.                 }
  12.         }
  13.         if(x < n and y < n) {
  14.                 printf("%lld\n",a[x + 1][y] + a[x][y + 1] - a[x + 1][y + 1]);
  15.         }
  16.         else if(x == 1 and y == n) {
  17.                 printf("%lld\n",a[x + 1][y] + a[x][y - 1] - a[x + 1][y - 1]);
  18.         }
  19.         else if(x == n and y == 1) {
  20.                 printf("%lld\n",a[x - 1][y] + a[x][y + 1] - a[x - 1][y + 1]);
  21.         }
  22.         else {
  23.                 printf("%lld\n",a[x - 1][y] + a[x][y - 1] - a[x - 1][y - 1]);
  24.         }
  25.         return 0;
  26. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表