社区讨论

玄学,求问

P2484[SDOI2011] 打地鼠参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mid6uc2n
此快照首次捕获于
2025/11/24 21:34
3 个月前
此快照最后确认于
2025/11/24 21:34
3 个月前
查看原帖
以下代码没有问题
CPP
#include<bits/stdc++.h>
#define Ad(u,l,d,r,v) (sum[u][l]+=v,sum[d+1][r+1]+=v,sum[u][r+1]-=v,sum[d+1][l]-=v)
using namespace std;
int n,m,num[110][110],sum[110][110],ans,tot,t;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		cin>>num[i][j];
    		tot+=num[i][j];
    	}
    }
    for(int r=1;r<=n;r++){
        for(int c=1;c<=m;c++){
            memset(sum, 0, sizeof(sum));
            bool flag=1;
            for(int i=1;i<=n&&flag;i++){
            	for(int j=1;j<=m&&flag;j++){
            		sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
            		if(sum[i][j]>num[i][j]){
            			flag=0;
            			break;
            		}
            		if(sum[i][j]<num[i][j]){
            			if(i+r-1>n||j+c-1>m){
            				flag=0;
            				break;
            			}
            			t=num[i][j]-sum[i][j];
            			Ad(i,j,i+r-1,j+c-1,t);
            			
            		}
            	}
            }
            if(flag){
            	ans=max(ans,r*c);
            }
            
        }
    }
    
    printf("%d",tot/ans);
    return 0;
}
但是更改
CPP
t=num[i][j]-sum[i][j];
Ad(i,j,i+r-1,j+c-1,t);
变为
CPP
Ad(i,j,i+r-1,j+c-1,num[i][j]-sum[i][j]);
直接卡死

回复

0 条回复,欢迎继续交流。

正在加载回复...