2 条题解
-
0
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
蓝桥云课 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
- 难度
- 2
- 标签
- 递交数
- 51
- 已通过
- 31
- 上传者