Loading

蓝桥杯冲刺-day03

AcWing 795 前缀和

输入样例:

5 3
2 1 3 6 4
1 2
1 3
2 4

输出样例:

3
6
10

代码

  1. 记得初始化
  2. s[r] - s[l-1];


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;

/**
 * P795 前缀和
 * @author vccyb
 *
 */
public class Main{
	public static void main(String[] args) throws IOException {
		//1. 输入
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] line1 = br.readLine().split(" ");
		int n = Integer.parseInt(line1[0]); //数组长度
		int m = Integer.parseInt(line1[1]); //m次询问
		
		int[] a = new int[n+1];
		String[] line2 = br.readLine().split(" ");
		for(int i=1;i<=n;i++){
			a[i] = Integer.parseInt(line2[i-1]);
		}
		
		//前缀和的初始化 s[]
		int[] s = new int[n+1];
		for(int i=1;i<=n;i++){
			s[i] = s[i-1] + a[i];
		}
		
		
		while(m-->0){
			String[] line3 = br.readLine().split(" ");
			int l = Integer.parseInt(line3[0]);
			int r = Integer.parseInt(line3[1]);
			int ans = s[r] - s[l-1];
			System.out.println(ans);
			
		}
				
	}

}

AcWing 796 子矩阵的和

  1. 初始化
    sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + matrix[i - 1][j - 1];

  2. 子矩阵的和
    sum[row2][col2] - sum[row1 -1][col2] - sum[row2][col1 - 1] + sum[row1 - 1][col1 - 1]

import java.io.*;

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] str = reader.readLine().split(" ");
        int row = Integer.parseInt(str[0]);
        int col = Integer.parseInt(str[1]);
        int n = Integer.parseInt(str[2]);
        int[][] matrix = new int[row][col];
        for(int i = 0; i < row; i++){
            String[] str1 = reader.readLine().split(" ");
            for(int j = 0; j < col; j++){
                matrix[i][j] = Integer.parseInt(str1[j]);
            }
        }
        int[][] sum = new int[row + 1][col + 1];
        for(int i = 1; i < row + 1; i++){
            for(int j = 1; j < col + 1; j++){
                sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + matrix[i - 1][j - 1];
            }
        }
        for(int i = 0; i < n; i++){
            String[] str2 = reader.readLine().split(" ");
            int row1 = Integer.parseInt(str2[0]);
            int col1 = Integer.parseInt(str2[1]);
            int row2 = Integer.parseInt(str2[2]);
            int col2 = Integer.parseInt(str2[3]);
            System.out.println(sum[row2][col2] - sum[row1 -1][col2] - sum[row2][col1 - 1] + sum[row1 - 1][col1 - 1]);
        }
    }
}

AcWing 1221 四平方和

四平方和定理,又称为拉格朗日定理:

每个正整数都可以表示为至多 4 个正整数的平方和。

如果把 0 包括进去,就正好可以表示为 4 个数的平方和。

并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。

输入

5

输出样例:

0 0 1 2





import java.io.*;
import java.util.*;
public class Main {
	
	
	static Map<Integer,Integer> map = new HashMap<Integer, Integer>();
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		solve(n);
		
	}
	
	
	static void solve(int n){
		//1. 预处理
		for(int i=0;i*i*2<=n;i++){
			for(int j=i;i*i+j*j<=n;j++){
				if(!map.containsKey(i*i+j*j)){
					map.put(i*i+j*j, i);
				}
			}
		}
		
		for(int i=0;i*i*4<=n;i++){
			for(int j=i;(i*i+j*j)*2<=n;j++){
				if(map.containsKey(n-i*i-j*j)){
					int c = map.get(n-i*i-j*j);
					int d = (int) Math.sqrt(n-i*i-j*j-c*c);
					System.out.println(i+" "+j+" "+c+" "+d+" ");
					return;
				} 
			}
		}
	}
}
posted @ 2020-09-24 20:30  想用包子换论文  阅读(150)  评论(0)    收藏  举报