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

}`

相关推荐
疯狂打码的少年32 分钟前
【数据结构】复习日:树 + 图 + 排序(整理对比表)
数据结构·笔记·算法
benchmark_cc36 分钟前
Claude Code + MCP + QuantDash:打造全自动量化研究流水线的终极指南
人工智能·后端·爬虫·算法·claude·mcp·quantdash
星星.7221 小时前
2026河南萌新联赛第六场(郑州大学)补题B、D、L、J、I
数据结构·c++·算法
朝发如雪1 小时前
快速掌握Linux(2)(时间相关函数)(文件IO)
linux·python·算法
Forever Nore1 小时前
LeetCode 16 最接近的三数之和 - 双指针逼近
算法·leetcode·职场和发展
smj2302_796826521 小时前
解决leetcode第4033题有效K个不同元素子数组I
数据结构·python·算法·leetcode
学linux的QQ蛋2 小时前
Linux 文件 IO:系统调用 open/read/write 完整总结
linux·运维·算法
rannn_1112 小时前
【力扣hot100】回溯专题|全排列、子集、字母组合、组合总和、括号生成、单词搜索、分割回文串、N皇后
java·算法·leetcode·回溯
旖旎夜光2 小时前
LCR 173:在点名(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
重生之后端学习2 小时前
438. 找到字符串中所有字母异位词[中等]✅
开发语言·数据结构·算法·leetcode·职场和发展