3 条题解

  • 0
    @ 2026-6-4 20:14:00
    import sys
    input =lambda:sys.stdin.readline().strip()
    minput = lambda:map(int, input().split())
    n,m,q = minput()
    A = [list(minput()) for _ in range(n)]
    d = [[0] * (m+1) for _ in range(n+1)]
    for _ in range(q):
        x1,y1,x2,y2,dd = minput()
        d[x1-1][y1-1] += dd
        d[x1-1][y2] -= dd
        d[x2][y1-1] -= dd
        d[x2][y2] += dd
    for i in range(n):
        for j in range(m):
            if i > 0:
                d[i][j] += d[i-1][j]
            if j > 0:
                d[i][j] += d[i][j-1]
            if i > 0 and j > 0:
                d[i][j] -= d[i-1][j-1]
            A[i][j] += d[i][j]
    for i in range(n):
        print(*A[i])
    
    • 0
      @ 2025-9-15 14:35:23

      c++ ac代码 二维转化成一维

      #include<bits/stdc++.h>
      using namespace std;
      #define int long long
      int a[1010][1010],b[1010][1010];//a数组存储原来数字 b数组用来存差分
      signed main(){
       int n,m,q;
       cin>>n>>m>>q;
       for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++){
              cin>>a[i][j];
              if(j!=1)
              b[i][j]=a[i][j]-a[i][j-1];
              else {
              b[i][j]=a[i][j];//第一列就等于原本的
              }
          }
       }
       for(int k=1;k<=q;k++){
          int x1,y1,x2,y2,ans=0,d;
          cin>>x1>>y1>>x2>>y2>>d;
          
          for(int i=x1;i<=x2;i++){
              b[i][y1]+=d;//y1开始差分
              b[i][y2+1]-=d;//y2+1减去
          }
       }
       for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++){
              if(j!=1){
                  a[i][j]=a[i][j-1]+b[i][j];
                  cout<<a[i][j]<<" ";
              }
              else {
                  a[i][j]=b[i][j];
                  cout<<a[i][j]<<" ";
              }
          }
          cout<<endl;
       }
      }
      

      然鹅这个代码还是一维的时间复杂度 数据太水了可以过去!!! 我们需要二维的根本差分

      #include<bits/stdc++.h>
      using namespace std;
      #define int long long
      int a[1050][1050],b[1050][1000];
      int n,m,q;
      signed main(){
      cin>>n>>m>>q;
      for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++){
              cin>>a[i][j];
          }
      }
      while(q--){
          int x1,x2,y1,y2,d;
          cin>>x1>>y1>>x2>>y2>>d;
          b[x1][y1]+=d;
          b[x2+1][y1]-=d;b[x1][y2+1]-=d;
          b[x2+1][y2+1]+=d;
          
      }
      for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++){
              b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
              cout<<b[i][j]+a[i][j]<<" ";
          }
          cout<<endl;
      }
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      }
      
      
      • 0
        @ 2025-5-8 22:00:36

        蓝桥云课 AC代码 JAVA

        import java.util.*;
        import java.util.StringTokenizer;
        import java.io.*;
        
        public class Main {
        
        	public static void main(String[] args) {
        		int n=in.nextInt();
        		int m=in.nextInt();
        		int q=in.nextInt();
        		int[][] arr=new int[n+10][m+10];
        		int[][] b=new int[n+10][m+10];
        		for(int i=1;i<=n;i++){
        			for(int j=1;j<=m;j++){
        				arr[i][j]=in.nextInt();
        				b[i][j]=arr[i][j]-arr[i-1][j]-arr[i][j-1]+arr[i-1][j-1];
        			}
        		}
        		while(q-->0){
        			int x1=in.nextInt(),y1=in.nextInt(),x2=in.nextInt(),y2=in.nextInt(),c=in.nextInt();
        			b[x1][y1]+=c;
        			b[x2+1][y1]-=c;
        			b[x1][y2+1]-=c;
        			b[x2+1][y2+1]+=c;
        		}
        		for(int i=1;i<=n;i++){
        			for(int j=1;j<=m;j++){
        				arr[i][j]=b[i][j]+arr[i][j-1]+arr[i-1][j]-arr[i-1][j-1];
        				out.print(arr[i][j]+" ");
        			}out.println();
        		}
        		out.close();
        	}
        	
        	
        
        	static FastReader in=new FastReader();
        	static PrintWriter out=new PrintWriter(System.out);
        	static class FastReader{
        		static BufferedReader br;
        		static StringTokenizer st;
        		FastReader(){
        			br=new BufferedReader(new InputStreamReader(System.in));
        		}
        		String next() {
        			String str="";
        			while(st==null||!st.hasMoreElements()) {
        				try {
        					str=br.readLine();
        				}catch(IOException e) {
        					throw new RuntimeException(e);
        				}
        				st=new StringTokenizer(str);
        			}
        			return st.nextToken();
        		}
        		int nextInt() {
        			return Integer.parseInt(next());
        		}
        		double nextDouble() {
        			return Double.parseDouble(next());
        		}
        		long nextLong() {
        			return Long.parseLong(next());
        		}
        	}
        	
        }
        
        
        • 1

        信息

        ID
        41
        时间
        1000ms
        内存
        256MiB
        难度
        入门
        标签
        递交数
        300
        已通过
        156
        上传者