Advertisement

牛客 LaserBombs Solution (二维前缀和)

阅读量:

原题链接:https://ac.nowcoder.com/acm/contest/999/A
解题思路 :采用s[][]数组用于保存各个位置对应的数值,随后对s数组执行二维前缀和的处理,使得s[i][j]所存储的数据表示以坐标x = i、y = j为顶点,并与坐标轴共同构成的区域内的总价值。接下来,对每个边长为R的正方形区域内的s数组值进行遍历,从中确定最大值
注意 :r的取值可能超过5001,这将导致在运行过程中出现溢出问题,因此需要预先将r设置为r = min(5001, r)
对于不熟悉二维前缀和操作的用户,可以参考以下链接:

复制代码
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    const int N = 5e3 + 10;
    
    int a[N][N], s[N][N];
    int n, r;
    int w;
    int rv;
    
    int main()
    {
    	cin>>n>>r;
    	r = min(5001, r);
    	int i1 = r, j1 = r;
    	while(n -- ){
    		int i, j;
    		ci

全部评论 (0)

还没有任何评论哟~