本文主要是介绍【错题集-编程题】十字爆破(预处理 + 模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
牛客对于题目链接:十字爆破 (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 方式。
这篇关于【错题集-编程题】十字爆破(预处理 + 模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!