9月9日 360笔试
第一题送水:双dp 100%
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for(int i = 0;i< n;i++){
nums[i] = sc.nextInt();
}
int[] dp1 = new int[n];//每个位置相邻左边比他小的个数
int[] dp2 = new int[n];//每个位置右边比他小个数
dp1[0] = 0;
dp2[n-1] = 0;
for(int i = 1;i< n;i++){
if(nums[i] > nums[i-1]){
dp1[i] = dp1[i -1]+1;
}
}
for(int i = n -2;i >= 0;i--){
if(nums[i] >nums[i + 1]){
dp2[i] = dp2[i+1] +1;
}
}
int res = 0;
for(int i = 0;i< n;i++){
res = Math.max(dp1[i] +dp2[i] +1,res);
}
System.out.println(res);
}
}
第二题暴力:l忘了++死循环,当时没时间debug了 #泪目
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int q = sc.nextInt();
int[][] nums = new int[q][2]; //操作数
for(int i = 0;i < q; i++){
for(int j = 0;j< 2;j++){
int a = sc.nextInt();
nums[i][j] = a - 1;
}
}
sc.close();
boolean[] chase = new boolean[n];//false为黑
int[] res = new int[q];//结果
for(int i = 0;i < q;i++){
int l = nums[i][0];
int r = nums[i][1];
while(l<=r){
chase[l] = chase[l] == false ? true :false;
l++;//
}
int a = 0;
for(int j = 0;j< n;j++){
if(!chase[j]){
a++;
}
}
res[i] = a;
}
for(int i = 0;i< q;i++){
System.out.println(res[i]);
}
}
}

查看14道真题和解析
