关于java评测机的疑问
查看原帖
关于java评测机的疑问
462645
溶金落梧桐楼主2022/1/12 02:09

java的评测机的内存判定是否消耗过大了,例如糖果传递该题,一直是爆了125MB内存,但是我在其他平台上找到相同的题目,同样的代码只消耗了40MB内存 ,我开的数组是2个1e6的long和一个1e6的int,相当于开了5e6的int,大约只有20mb,不懂为什么能超这么多


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    static int N= (int) (1e6+5);
    static int a[]=new int[N];
    static long s[]=new long[N];
    static long c[]=new long[N];
    static int n;
    static void solve(){
        n=in.nextInt();
        for(int i=1;i<=n;i++){
            a[i]=in.nextInt();
            s[i]=s[i-1]+a[i];
        }
        long avg=s[n]/n;
        c[1]=0;
        for(int i=2;i<=n;i++) c[i]=s[i-1]-avg*(i-1);
        Arrays.sort(c,1,n+1);
        long res=0;
        for (int i=1;i<=n;i++) res=res+Math.abs(c[i]-c[(n+1)/2]);
        System.out.println(res);
    }
    public static void main(String[] args) {
        solve();
        out.flush();
    }
    static PrintWriter out=new PrintWriter(System.out);
    static FastReader in = new FastReader();
    static class FastReader{
        StringTokenizer st;
        BufferedReader br;
        FastReader(){
            br=new BufferedReader(new InputStreamReader(System.in));
        }
        String next(){
            while (st==null||!st.hasMoreElements()){
                try {
                    st=new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }
        int nextInt(){
            return Integer.parseInt(next());
        }
    }
}

2022/1/12 02:09
加载中...