鱼C论坛

 找回密码
 立即注册
查看: 1038|回复: 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 | 显示全部楼层
如果数据范围较大并且需要使用前缀和来求解重复矩阵的面积,可以按照以下步骤编写代码:
#include <iostream>#include <vector>using namespace std;int main() {    int n, m; // 原始矩阵的大小    int r, c; // 重复矩阵的大小    int x1, y1, x2, y2; // 重复矩阵的左上角和右下角坐标    long long sum = 0; // 重复矩阵的面积        cin >> n >> m;    vector<vector<int>> matrix(n, vector<int>(m));    vector<vector<long long>> prefixSum(n+1, vector<long long>(m+1, 0));        // 读取原始矩阵    for (int i = 0; i < n; i++) {        for (int j = 0; j < m; j++) {            cin >> matrix[i][j];        }    }        cin >> r >> c >> x1 >> y1 >> x2 >> y2;        // 计算二维前缀和数组    for (int i = 1; i <= n; i++) {        for (int j = 1; j <= m; j++) {            prefixSum[i][j] = matrix[i-1][j-1] + prefixSum[i-1][j] + prefixSum[i][j-1] - prefixSum[i-1][j-1];        }    }        // 计算重复矩阵的面积    sum = prefixSum[x2][y2] - prefixSum[x1-1][y2] - prefixSum[x2][y1-1] + prefixSum[x1-1][y1-1];        cout << "重复矩阵的面积:" << sum << endl;        return 0;}
这段代码使用C++编写,通过二维前缀和数组来计算重复矩阵的面积。首先读取原始矩阵的大小和元素,然后读取重复矩阵的大小和左上角、右下角坐标。接下来,计算原始矩阵的二维前缀和数组,然后通过前缀和数组计算重复矩阵的面积。最后将结果输出。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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