蓝桥杯冲刺-day03
AcWing 795 前缀和
输入样例:
5 3
2 1 3 6 4
1 2
1 3
2 4
输出样例:
3
6
10
代码
- 记得初始化
- 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 子矩阵的和
-
初始化
sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + matrix[i - 1][j - 1]; -
子矩阵的和
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;
}
}
}
}
}

浙公网安备 33010602011771号