1.灵异背包


java
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int a=0;
int sum=0;
int minJi=999999;
//表示满足条件的最大偶数和。只要总和是偶数
for(int i=0;i<n;i++){
a=in.nextInt();
sum+=a;
if(a%2!=0){
minJi=Math.min(minJi,a);
}
}
if(sum%2!=0){
System.out.print(sum-minJi);
}else{
System.out.print(sum);
}
}
}
2.BGN34 01序列



java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt(); // 数组长度
int[] arr = new int[m];
for (int i = 0; i < m; i++) {
arr[i] = sc.nextInt();
}
int n = sc.nextInt(); // 需要插入的1的数量
int count = 0; // 最多能插入的1的数量
for (int i = 0; i < m; i++) {
// 当前是1,直接跳过
if (arr[i] == 1) continue;
// 检查左边:i>0时,左边不能是1 满足任意一个就代表左边安全:
//i == 0 → 我是第一个位置,根本没有左边 → 安全
//arr[i-1] == 0 → 我左边的位置是 0(没有 1)→ 安全
boolean left=(i==0)||(arr[i-1]==0);
// 检查右边:i不是最后一个时,右边不能是1
boolean right=(i==m-1)||(arr[i+1]==0);
if(left&& right){
// 插入1,修改数组,避免后续插相邻
arr[i]=1;
count++;//统计能加入的1的数量
// 提前终止:够数了直接输出,不用再遍历
if(count>n){
System.out.print(true);
return;
}
}
}
// 遍历完看是否满足需求
System.out.println(count >= n ? "true" : "false");
}
}
BGN28 最大 FST 距离






`import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 边界:只有1个数字,没有两两组合 → 距离=0
if (n <= 1) {
System.out.println(0);
return;
}
// 读取第一个数字 p,下标 i=1
long p = sc.nextLong();
long i = 1;
// 计算:数值² + 下标² → 就是我们说的 u
long maxU = p * p + i * i;
long minU = maxU;
// 计算:数值² - 下标² → 就是我们说的 v
long maxV = p * p - i * i;
long minV = maxV;
// 从下标 2 开始遍历剩下所有数字
for (i = 2; i <= n; i++) {
p = sc.nextLong();
// 计算当前数字的 u 和 v
long u = p * p + i * i;
long v = p * p - i * i;
// 更新 u 的最大/最小值
maxU = Math.max(maxU, u);
minU = Math.min(minU, u);
// 更新 v 的最大/最小值
maxV = Math.max(maxV, v);
minV = Math.min(minV, v);
}
// 答案 = 两个差值里更大的那个
System.out.println(Math.max(maxU - minU, maxV - minV));
}
}`