求大佬帮忙看下,不知道为什么11wa了
查看原帖
求大佬帮忙看下,不知道为什么11wa了
896723
aibby楼主2025/1/9 09:51
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;

public class 小z的AK计划 {
    static final int N = 100010;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Long m = in.nextLong();
        Ti[] tis = new Ti[N];
        for(int i = 1;i<=n;i++){
            Ti ttt = new Ti();
            ttt.x = in.nextLong();
            ttt.t = in.nextLong();
            tis[i] = ttt;
        }
        Arrays.sort(tis,1,n+1);
        long ti = 0;
        PriorityQueue<Long> q = new PriorityQueue<>((a,b)->Long.compare(b,a));
        for(int i = 1;i<=n;i++){
            if(m-tis[i].x>=ti+tis[i].t){
                q.add(tis[i].t);
                ti+=tis[i].t;
            }else {
                if(!q.isEmpty()&&ti-q.peek()+tis[i].t<m-tis[i].x){
                    ti = ti-q.peek()+tis[i].t;
                    q.poll();
                    q.add(tis[i].t);
                }
            }
        }
        System.out.println(q.size());
    }
}
class Ti implements Comparable<Ti>{
    long x;
    long t;

    @Override
    public int compareTo(Ti o) {
        if(this.x!=o.x)return Long.compare(this.x,o.x);
        return Long.compare(this.t,o.t);
    }
}

我的思路是,按照x排序后一直往一个方向走,如果时间够的话就把t加入大根堆,如果不够的话看看能不能把堆顶取出来,再看时间够不够,够的话,就弹出堆顶,然后在加入这个到堆顶,最后堆里元素的数量就是答案,不知道为什么错了。

2025/1/9 09:51
加载中...