2 条题解

  • 1
    @ 2026-9-5 18:00:19
    #include<bits/stdc++.h>
    using namespace std;
    long long m,n,h,a[1005][1005],cnt,ans;
    int main(){
    	cin>>m>>n>>h;
    	for(int i=1;i<=m;i++){
    		for(int j=1;j<=n;j++){
    			cin>>a[i][j];
    		}
    	}
    	
    	for(int i=1;i<=m-2;i++){
    		for(int j=1;j<=n-2;j++){
    			int Min=INT_MAX,Max=INT_MIN;
    			cnt=0;
    			for(int k=i;k<=i+2;k++){
    				for(int x=j;x<=j+2;x++){
    					if(a[k][x]<Min) Min=a[k][x];
    					if(a[k][x]>Max) Max=a[k][x];
    					cnt+=a[k][x];
    				}
    			}
    			if(Max-Min<=h){
    				if(cnt>ans) ans=cnt;
    			}
    		}
    	}
    	
    	cout<<ans;
    	return 0; 
    }
    //包包包AC!!!
    
    • -2
      @ 2026-5-1 11:22:13
      #define LL long long
      using namespace std;
      const int N = 1010;
      int M,N,H;
      int a[N][N];
      int row_max[N][N], row_min[N][N];
      int mat_max[N][N], mat_min[N][N];
      deque<int> dq;
      int main(){
          cin>>M>>N>>H;
          for(int i=1;i<=M;i++){
              for(int j=1;j<=N;j++){
                  cin>>a[i][j];
              }
          }
          for(int i=1;i<=M;i++){
              dq.clear();
              for(int j=1;j<=N;j++){
                  while(!dq.empty() && j-dq.front()>=3) dq.pop_front();
                  while(!dq.empty() && a[i][dq.back()]<=a[i][j]) dq.pop_back();
                  dq.push_back(j);
                  if(j>=3) row_max[i][j-1] = a[i][dq.front()];
              }
              dq.clear();
              for(int j=1;j<=N;j++){
                  while(!dq.empty() && j-dq.front()>=3) dq.pop_front();
                  while(!dq.empty() && a[i][dq.back()]>=a[i][j]) dq.pop_back();
                  dq.push_back(j);
                  if(j>=3) row_min[i][j-1] = a[i][dq.front()];
              }
          }
          for(int j=2;j<=N-1;j++){
              dq.clear();
              for(int i=1;i<=M;i++){
                  while(!dq.empty() && i-dq.front()>=3) dq.pop_front();
                  while(!dq.empty() && row_max[dq.back()][j]<=row_max[i][j]) dq.pop_back();
                  dq.push_back(i);
                  if(i>=3) mat_max[i-1][j] = row_max[dq.front()][j];
              }
              dq.clear();
              for(int i=1;i<=M;i++){
                  while(!dq.empty() && i-dq.front()>=3) dq.pop_front();
                  while(!dq.empty() && row_min[dq.back()][j]>=row_min[i][j]) dq.pop_back();
                  dq.push_back(i);
                  if(i>=3) mat_min[i-1][j] = row_min[dq.front()][j];
              }
          }
          LL pre[N][N]={0};
          for(int i=1;i<=M;i++){
              for(int j=1;j<=N;j++){
                  pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1] + a[i][j];
              }
          }
          LL ans=0;
          for(int i=2;i<=M-1;i++){
              for(int j=2;j<=N-1;j++){
                  if(mat_max[i][j] - mat_min[i][j] <= H){
                      LL sum = pre[i+1][j+1] - pre[i-2][j+1] - pre[i+1][j-2] + pre[i-2][j-2];
                      ans = max(ans, sum);
                  }
              }
          }
          cout<<ans<<endl;
          return 0;
      }
      //:)
      //114514
      
      

      找豆包写的

      • 1

      信息

      ID
      3428
      时间
      1000ms
      内存
      256MiB
      难度
      6
      标签
      递交数
      42
      已通过
      13
      上传者