2023 顺丰菁英挑战赛——编程方向Java题解

第一题

模拟

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        StringBuilder str1 = new StringBuilder();
        StringBuilder str2 = new StringBuilder();
        StringBuilder num = new StringBuilder();
        for(char c : s.toCharArray()){
            if(Character.isDigit(c)){
                num.append(c);
            }else if(Character.isLowerCase(c)){
                str1.append(c);
            }else if(Character.isUpperCase(c)){
                str2.append(c);
            }
        }
        System.out.println(str1.toString());
        System.out.println(str2.toString());
        System.out.println(num.toString());
    }
}

第三题

建图最短路+贪心

import java.util.Scanner;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt(), x = sc.nextInt();
        List<int[]>[] g = new List[n + 1];
        boolean[] vis = new boolean[n + 1];
        long[] f = new long[n + 1];
        for (int i = 1; i <= n; i++) {
            g[i] = new ArrayList<int[]>();
        }
        for (int i = 0; i < m; i++) {
            int u = sc.nextInt(), v = sc.nextInt(), w = sc.nextInt();
            g[u].add(new int[] {v, w});
            g[v].add(new int[] {u, w});
        }
        if (g[1].isEmpty() || g[n].isEmpty()) {
            System.out.println(-1);
            return;
        }
        Arrays.fill(f, Long.MAX_VALUE);
        PriorityQueue<long[]> que = new PriorityQueue<>((a, b)-> Long.compare(a[0], b[0])); //存放 [距起点 1 的距离, 节点索引]
        f[1] = 0;
        que.offer(new long[] {0, 1});
        while (!que.isEmpty()) {
            long[] tmp = que.poll();
            int idx = (int)tmp[1];
            if (vis[idx]) {
                continue;
            }
            vis[idx] = true;
            for (int[] e : g[idx]) {
                int i = e[0], w = e[1];
                if (f[i] > f[idx] + w) {
                    f[i] = f[idx] + w;
                    que.offer(new long[] {f[i], i});
                }
            }
        }

        long ans = x, mn = Integer.MAX_VALUE;
        for (int[] e : g[1]) {
            mn = Math.min(mn, e[1]);
        }
        ans += mn;
        mn = Integer.MAX_VALUE;
        for (int[] e : g[n]) {
            mn = Math.min(mn, e[1]);
        }
        ans += mn;
        System.out.println( Math.min(ans, f[n]));
    }
}

第四题

import java.util.Scanner;
import java.util.PriorityQueue;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //贪心,优先用工资更少的人,工资相同的优先用满意度更大的
        PriorityQueue<int[]> st1 = new PriorityQueue<>((a,b)->a[0]==b[0]?b[1]-a[1]:a[0]-b[0]);
        PriorityQueue<int[]> st2 = new PriorityQueue<>((a,b)->a[0]==b[0]?b[1]-a[1]:a[0]-b[0]);
        int n = in.nextInt();
        int x = in.nextInt();
        int y = in.nextInt();
        in.nextLine();
        for(int i=0;i<n;++i){
            String str = in.nextLine();
            // System.out.println(str);
            String[] arr = str.split(" ");
            int a = Integer.parseInt(arr[1]);
            int b = Integer.parseInt(arr[2]);
            if(arr[0].charAt(0)=='A'){
                st1.offer(new int[]{a,b});
            }else{
                st2.offer(new int[]{a,b});
            }
        }
        if(st2.size()< y || st2.size()- y + st1.size()<x){
            System.out.println(-1);
            return;
        }
        long res = 0;
        // 优先把跨城的用完,然后把剩下的跨城快递员安排到同城的里面
        while(y-->0){
            res += st2.poll()[1];
        }
        while(!st2.isEmpty()){
            st1.offer(st2.poll());
        }
        while(x-->0){
            res += st1.poll()[1];
        }
        System.out.println(res);
    }
}

#笔试##算法题##比赛#
全部评论
第二题太麻烦不想看了orz,第三题赛后参考了该同学https://www.nowcoder.com/discuss/494627167554330624?sourceSSR=search
点赞 回复 分享
发布于 2023-06-06 23:42 北京
这道题需要什么前置知识吗?
点赞 回复 分享
发布于 2023-06-07 11:06 浙江

相关推荐

2024-12-25 16:59
已编辑
江西师范大学科学技术学院 HRBP
沐雨千秋:难,这实习一眼兼职暑假工
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务