牛客--贪心算法的简单题--最大 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));
}

}`

相关推荐
QiLinkOS7 小时前
第三视觉理解徐玉生与他的商业活动(30)
大数据·c++·人工智能·算法·开源协议
疯狂打码的少年8 小时前
【操作系统】页面置换算法(OPT/FIFO/LRU)
算法
小O的算法实验室8 小时前
2026年CIE,优化客货协同运输:综合地铁系统的列车容量动态分配
算法
Coder_Shenshen9 小时前
西门子S7CommPlus协议鉴权算法原理与流程详解
网络·后端·算法
硕风和炜10 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集
我是一颗柠檬11 小时前
【Java项目技术亮点】加权轮询负载均衡算法
java·算法·负载均衡
灯厂码农11 小时前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法
凯瑟琳.奥古斯特12 小时前
K次取反最大化数组和解法(力扣1005)
开发语言·c++·算法·leetcode·职场和发展
Jerry12 小时前
LeetCode 203. 移除链表元素
算法
地平线开发者13 小时前
征程 6 | 工具链 QAT ObserverBase 源码解析
算法