鱼C论坛

 找回密码
 立即注册
查看: 724|回复: 2

求重复矩阵的面积

[复制链接]
发表于 2023-11-18 20:47:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如果数据范围大用前缀和怎么写呢
Snipaste_2023-11-18_20-46-17.png
Snipaste_2023-11-18_20-46-25.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-18 20:47:18 | 显示全部楼层
你可以使用前缀和来解决这个问题。首先,将原始矩阵扩展为一个新的矩阵,使得原始矩阵中的每个元素都重复出现。然后,使用前缀和数组来存储新矩阵中每个位置的累积和。这样,你就可以快速计算任意子矩阵的和,从而求得重复矩阵的面积。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-18 20:49:26 | 显示全部楼层
如果数据范围较大并且需要使用前缀和来求解重复矩阵的面积,可以按照以下步骤编写代码:
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main() {
  5.     int n, m; // 原始矩阵的大小
  6.     int r, c; // 重复矩阵的大小
  7.     int x1, y1, x2, y2; // 重复矩阵的左上角和右下角坐标
  8.     long long sum = 0; // 重复矩阵的面积
  9.    
  10.     cin >> n >> m;
  11.     vector<vector<int>> matrix(n, vector<int>(m));
  12.     vector<vector<long long>> prefixSum(n+1, vector<long long>(m+1, 0));
  13.    
  14.     // 读取原始矩阵
  15.     for (int i = 0; i < n; i++) {
  16.         for (int j = 0; j < m; j++) {
  17.             cin >> matrix[i][j];
  18.         }
  19.     }
  20.    
  21.     cin >> r >> c >> x1 >> y1 >> x2 >> y2;
  22.    
  23.     // 计算二维前缀和数组
  24.     for (int i = 1; i <= n; i++) {
  25.         for (int j = 1; j <= m; j++) {
  26.             prefixSum[i][j] = matrix[i-1][j-1] + prefixSum[i-1][j] + prefixSum[i][j-1] - prefixSum[i-1][j-1];
  27.         }
  28.     }
  29.    
  30.     // 计算重复矩阵的面积
  31.     sum = prefixSum[x2][y2] - prefixSum[x1-1][y2] - prefixSum[x2][y1-1] + prefixSum[x1-1][y1-1];
  32.    
  33.     cout << "重复矩阵的面积:" << sum << endl;
  34.    
  35.     return 0;
  36. }
复制代码

这段代码使用C++编写,通过二维前缀和数组来计算重复矩阵的面积。首先读取原始矩阵的大小和元素,然后读取重复矩阵的大小和左上角、右下角坐标。接下来,计算原始矩阵的二维前缀和数组,然后通过前缀和数组计算重复矩阵的面积。最后将结果输出。

请注意,在实际使用时,需要根据具体的需求对输入输出进行适当的修改,并进行边界条件的检查和错误处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 18:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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