牛客--贪心算法的简单题--最大 FST 距离

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));
}

}`

相关推荐
hetao17338373 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6264 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan4 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356385 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah5 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO95 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician5 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.5 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o6 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者7 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express