有无Java神犇帮我看看为什么RE
查看原帖
有无Java神犇帮我看看为什么RE
974877
ksc264480楼主2024/3/28 21:51

这里是代码:

import java.util.*;
public class Main {
    static Node[] a=new Node[220000],win=new Node[110000],lose=new Node[110000];
    static int n,r,q,winCnt,lsCnt;

    static boolean cmp(Node x,Node y){
        return x.getScore()>y.getScore()||(x.getScore()==y.getScore()&&x.getId()<y.getId());
    }

    static void merge(){
        int ii=1,jj=1;
        int k=0;
        while(ii<=winCnt&&jj<=lsCnt){
            if(cmp(win[ii],lose[jj])){
                k++;
                a[k]=win[ii];
                ii++;
            }else{
                k++;
                a[k]=lose[jj];
                jj++;
            }
        }
        if(ii<=winCnt){
            for(int x=ii;x<=winCnt;x++){
                k++;
                a[k]=win[x];
            }
        }
        if(jj<=lsCnt){
            for(int x=jj;x<=lsCnt;x++){
                k++;
                a[k]=lose[x];
            }
        }
    }

    static void quickSort(int l,int r){
        Random rand=new Random();
        int t=rand.nextInt(l,r);
        Node tp=a[l];a[l]=a[t];a[t]=tp;
        int i=l,j=r,k=l+1;
        while(k<=j){
            if(a[k].getScore()>a[i].getScore()){
                Node tmp=a[k];a[k]=a[i];a[i]=tmp;
                i++;k++;
            }else if(a[k].getScore()<a[i].getScore()) {
                Node tmp=a[k];a[k]=a[j];a[j]=tmp;
                j--;
            }else if(a[k].getId()>a[i].getId()){
                Node tmp=a[k];a[k]=a[i];a[i]=tmp;
                k++;
            }else{
                k++;
            }
        }
        if(l<i-1){
            quickSort(l,i-1);
        }
        if(j+1<r){
            quickSort(j+1,r);
        }
    }

    public static void main(String[] args) {
        Scanner reader=new Scanner(System.in);
        n=reader.nextInt(); r=reader.nextInt(); q=reader.nextInt();
        for(int i=0;i<=2*n;i++){
            a[i]=new Node();
        }
        for(int i=0;i<=n;i++){
            win[i]=new Node();
        }
        for(int i=0;i<=n;i++){
            lose[i]=new Node();
        }
        for(int i=1;i<=2*n;i++){
            a[i].scanScore();
            a[i].scanId(i);
        }
        for(int i=1;i<=2*n;i++){
            a[i].scanW();
        }
        quickSort(1,2*n);
        for(int i=1;i<=r;i++){
            winCnt=lsCnt=0;
            for(int j=1;j<=n;j++){
                if(a[2*j-1].getW()>a[2*j].getW()){
                    a[2*j-1].addScore();
                    winCnt++;
                    lsCnt++;
                    win[winCnt]=a[2*j-1];
                    lose[lsCnt]=a[2*j];
                }else{
                    a[2*j].addScore();
                    winCnt++;
                    lsCnt++;
                    win[winCnt]=a[2*j];
                    lose[lsCnt]=a[2*j-1];
                }
            }
            merge();
        }
        System.out.println(a[q].getId());
        reader.close();
    }
}

class Node{
    private int id;
    private int w;
    private int score;
    private static final Scanner sc=new Scanner(System.in);

    public int getScore(){
        return this.score;
    }

    public int getId(){
        return this.id;
    }

    public int getW(){
        return this.w;
    }

    public void scanScore(){
        this.score=sc.nextInt();
    }

    public void scanW(){
        this.w=sc.nextInt();
    }

    public void scanId(int id){
        this.id=id;
    }

    public void addScore(){
        this.score++;
    }
}

我在intellij上面跑没问题,但是在测评机上就RE和MLE

有无神犇指点一下该怎么改,谢谢!

2024/3/28 21:51
加载中...