3.12拼多多

package com.company.pdd;

import java.util.Scanner;

public class pdd01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int cnt = 0;
        StringBuilder res = new StringBuilder();
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(Character.isDigit(c)) {
                cnt = cnt * 10 + (int) (c - '0');
                continue;
            }
            res.append(convert(cnt, c));
            cnt = 0;
        }
        System.out.println(res.toString());
    }
    public static String convert(int n, char c) {
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < n; i++) {
            sb.append(c);
        }
        return sb.toString();
    }
}

第一题无脑循环


第二题数一个数,11才用A否则都用B。

package com.company.pdd;

import java.util.Scanner;

public class pdd01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int cnt = 0;
        StringBuilder res = new StringBuilder();
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(Character.isDigit(c)) {
                cnt = cnt * 10 + (int) (c - '0');
                continue;
            }
            res.append(convert(cnt, c));
            cnt = 0;
        }
        System.out.println(res.toString());
    }
    public static String convert(int n, char c) {
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < n; i++) {
            sb.append(c);
        }
        return sb.toString();
    }
}

第三题我优化了一下再深搜,70%,没想到什么好方法能过。大佬求教

package com.company.pdd;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

public class pdd03 {
    static int n;
    static int res = Integer.MAX_VALUE;
    static int[][] limit_cost;
    static int[] cnt_num = new int[3];
    static int max_res = 0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        sc.nextLine();
        String[] ss = new String[n];
        for(int i = 0; i < ss.length; i++) {
            ss[i] = sc.nextLine();
        }
        Arrays.sort(ss, (a, b)->a.length() - b.length());
        limit_cost = new int[3][2];
        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 2; j++) {
                limit_cost[i][j] = sc.nextInt();
            }
        }
        int[][] dp = new int[n][3];
        for(int i = 0; i < n; i++) {
            String s = ss[i];
            for(int j = 0; j < s.length(); j++) {
                char c = s.charAt(j);
                dp[i][c - 'A'] = limit_cost[c - 'A'][1];
            }
        }
        dfs(dp, 0, 0, 0);
        if(res == Integer.MAX_VALUE) {
            System.out.println("NO");
            System.out.println(max_res);
        } else {
            System.out.println("YES");
            System.out.println(res);
        }

    }
    public static void dfs(int[][] dp, int dep, int cost, int max_person) {
        if(dep == n && max_person == n) {
            res = Math.min(cost, res);
            return ;
        }
        if(dep == n) {
            max_res = Math.max(max_res, max_person);
            return ;
        }
        int flag = 0;
        for(int j = 0; j < 3; j++) {
            if(dp[dep][j] != 0 && cnt_num[j] < limit_cost[j][0]) {
                if(flag == 0) max_person++;
                flag = 1;
                cnt_num[j]++;
                cost += limit_cost[j][1];
                dfs(dp, dep + 1, cost, max_person);
                cnt_num[j]--;
            }
        }
        if(flag == 0) {
            dfs(dp, dep + 1, cost, max_person);
        }
    }
}

第四题两个堆解决战斗

package com.company.pdd;

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

public class pdd04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        double sum = 0;
        int[] avg = new int[n];
        int[] mid = new int[n];
        PriorityQueue<Double> min = new PriorityQueue<>();
        PriorityQueue<Double> max = new PriorityQueue<Double>(new Comparator<Double>() {
            @Override
            public int compare(Double o1, Double o2) {
                return (o2 - o1) > 0? 1 : -1;
            }
        });
        for(int i = 0; i < n; i++) {
            double t = sc.nextDouble();
            sum += t;
            avg[i] = getNum(sum / (i * 1.0 + 1));
            if(i == 0) {
                max.add(t);
                mid[i] = (int) t;
                continue;
            }
            max.add(t);
            min.add(max.poll());
            if(max.size() - min.size() > 1) {
                min.add(max.poll());
            }
            if(min.size() - max.size() > 1) {
                max.add(min.poll());
            }
            if(i % 2 == 0) {
                mid[i] = i == 0 ? getNum(max.peek()) : getNum(min.peek());
            } else {
                mid[i] = getNum((min.peek() + max.peek()) / 2);
            }
        }
        for(int i = 0; i < n; i++) {
            System.out.print(avg[i] + " ");
        }
        System.out.println();
        for(int i = 0; i < n; i++) {
            System.out.print(mid[i] + " ");
        }
        System.out.println();
    }
    public static int getNum(double x) {
        int y = (int) (x * 10);
        y %= 10;
        if(y >= 5) {
            return (int) Math.ceil(x);
        }
        return (int) Math.floor(x);
    }
}