2 条题解
-
1
分享一个c++题解
#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]+=b[i][j-1]+a[i][j];//前缀和 else { b[i][j]=a[i][j];//第一列就等于原本的 } } } for(int k=1;k<=q;k++){ int x1,y1,x2,y2,ans=0; cin>>x1>>y1>>x2>>y2; //cout<<b[x1][y2]<<" "<<b[x1][y1]<<" " <<b[x2][y2]<<" "<<b[x2][y1]<<endl; for(int i=x1;i<=x2;i++){ ans+=b[i][y2]-b[i][y1-1]; } cout<<ans<<endl; } } -
0
JAVA AC代码:
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[][] sum=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(); sum[i][j]=arr[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]; } } while(q-->0){ int x1=in.nextInt(),y1=in.nextInt(),x2=in.nextInt(),y2=in.nextInt(); int ans=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]; out.println(ans); } 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
- 42
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 55
- 已通过
- 33
- 上传者