牛客对于题目链接:十字爆破 (nowcoder.com)

一、分析题目
暴力模拟会超时。
预处理,先把每一行以及每一列的和存起来。模拟即可,但是由于数据量过⼤,我们可以提前把每⼀⾏以及每⼀列的和存起来,⽅便统计总和。
二、代码
//值得学习的代码
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
typedef long long LL;
LL n, m;
LL row[N], col[N];
int main()
{
    scanf("%ld %ld", &n, &m);
    LL arr[n][m];
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            scanf("%ld", &arr[i][j]);
            row[i] += arr[i][j];
            col[j] += arr[i][j];
        }
    }
 
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            printf("%ld ", row[i] + col[j] - arr[i][j]);
        }
        printf("\n");
    }
 
    return 0;
} 
三、反思与改进
这道题的思路完全正确,不过没有考虑到数组初始化的问题(尽量还是定义全局变量,不需要再对数组进行初始化)。另外注意一下,这道题的输入输出数据量较大,所以尽量选择使用 scanf 或更快的 IO 方式。



















