0
点赞
收藏
分享

微信扫一扫

【Excel】WPS单元格快速转换表格字母大小写

霍华德 2023-10-19 阅读 40

点击直接跳转到该题目

目录

1️⃣题目描述

题目描述:
给你一个 n 行 m 列的矩阵 A ,下标从1开始。

接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2

请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和。

输入描述:
第一行包含三个整数n,m,q.

接下来n行,每行m个整数,代表矩阵的元素

接下来q行,每行4个整数x1, y1, x2, y2,分别代表这次查询的参数

注意:

  • 1 ≤ n , m ≤ 1000
  • 1 ≤ q ≤ 1 0 5 10^{5} 105
  • - 1 0 9 10^{9} 109 <= a[i][j] <= 1 0 9 10^{9} 109
  • 1 <= x1 <= x2 <= n
  • 1 <= y1 <= y2 <= m

输出描述:

输出q行,每行表示查询结果。

示例:

2️⃣题目解析

状态表示及状态转移方程:

  • dp[i][j] :表示从坐标(1,1)到坐标(i,j)中所有元素的和。
  • dp[i][j] = dp[i - 1][j] + dp[i][j - 1] + arr[i][j] - dp[i - 1][j - 1];

最后输出结果:dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1]

3️⃣解题代码

解题代码1:

#include<iostream>
#include<vector>
using namespace std;

const int N = 1e3 + 10, M = 1e3 + 10;

int main()
{
    int n , m , q;
    cin >> n >> m >> q;
    long long arr[N][M];
    vector<vector<long long>> dp(n + 1,vector<long long>(m + 1));
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= m;j++)
        {
            cin >> arr[i][j];
            dp[i][j] = dp[i][j - 1] + arr[i][j];
        }
    }
    while(q--)
    {
        int x1,y1,x2,y2;
        long long ret = 0;
        cin >> x1 >> y1 >> x2 >> y2;
        for(int i = x1;i <= x2;i++)
        {
            ret += (dp[i][y2] - dp[i][y1 - 1]);
        }
        cout << ret << endl;
    }
           
    return 0;
}

解题代码2:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int n,m,q;
    cin >> n >> m >> q;
    vector<vector<int>> arr(n + 1,vector<int>(m + 1));
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= m;j++)
            cin >> arr[i][j];

    // 创建前缀和矩阵
    vector<vector<long long>> dp(n + 1,vector<long long>(m + 1));
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= m;j++)
            dp[i][j] = dp[i - 1][j] + dp[i][j - 1] + arr[i][j] - dp[i - 1][j - 1];

    // 使用前缀和矩阵
    int x1,y1,x2,y2;
    while(q--)
    {
        cin >> x1 >> y1 >> x2 >> y2;
        cout << dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1] << endl;
    }
    return 0;
}

最后就是代码通过啦!!!

在这里插入图片描述

举报

相关推荐

0 条评论