0

I was skimming through a few codes written in Java during a competitive programming contest and I simply Failed to understand the Memory used by their code turned out to be 0kb.

 import java.io.*;
import java.util.*;

public class C {
    FastScanner in = new FastScanner(System.in);
    PrintWriter out = new PrintWriter(System.out);

    public void run() {
        int n = in.nextInt(), m = in.nextInt(), k = in.nextInt();
        int[] a = in.nextIntArray(n);

        long[] sum = new long[n+1];
        for (int i = 1; i <= n; i++) {
            sum[i] = sum[i-1] + a[i-1];
        }

        long[] cur = new long[n+1];
        long[] old = new long[n+1];

        for (int i = 1; i <= k; i++) {
            Arrays.fill(cur, Long.MIN_VALUE / 2);
            for (int j = i * m; j <= n; j++) {
                cur[j] = Math.max(cur[j-1], old[j-m] + sum[j] - sum[j-m]);
            }
            long[] temp = cur;
            cur = old;
            old = temp;
        }
        System.out.println(old[n]);
        out.close();
    }

    public static void main(String[] args) {
        new C().run();
    }

    public void mapDebug(int[][] a) {
        System.out.println("--------map display---------");

        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.printf("%3d ", a[i][j]);
            }
            System.out.println();
        }

        System.out.println("----------------------------");
        System.out.println();
    }

    public void debug(Object... obj) {
        System.out.println(Arrays.deepToString(obj));
    }

    class FastScanner {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;

        public FastScanner(InputStream stream) {
            this.stream = stream;
            //stream = new FileInputStream(new File("dec.in"));

        }

        int read() {
            if (numChars == -1)
                throw new InputMismatchException();
            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }
                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        boolean isSpaceChar(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        boolean isEndline(int c) {
            return c == '\n' || c == '\r' || c == -1;
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        int[] nextIntArray(int n) {
            int[] array = new int[n];
            for (int i = 0; i < n; i++)
                array[i] = nextInt();

            return array;
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        long[] nextLongArray(int n) {
            long[] array = new long[n];
            for (int i = 0; i < n; i++)
                array[i] = nextLong();

            return array;
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        double[] nextDoubleArray(int n) {
            double[] array = new double[n];
            for (int i = 0; i < n; i++)
                array[i] = nextDouble();

            return array;
        }

        String next() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            } while (!isSpaceChar(c));
            return res.toString();
        }

        String[] nextStringArray(int n) {
            String[] array = new String[n];
            for (int i = 0; i < n; i++)
                array[i] = next();

            return array;
        }

        String nextLine() {
            int c = read();
            while (isEndline(c))
                c = read();
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            } while (!isEndline(c));
            return res.toString();
        }
    }
}

How is memory used basically calculated during the contest? and what are the basic optimizations one can use in Java when it comes to execution time and memory. And what is exactly the public void debug(Object ... obj) I've never seen anything like this before in java.

Apurv
  • 315
  • 5
  • 14
  • `what are the basic optimizations one can use in Java when it comes to execution time and memory.` This question is a bit too broad, entire books have been written on the subject. – biziclop Apr 21 '15 at 12:33
  • What you see with `public void debug(Object ... obj)` is called "varargs" (or variable arity parameter if you want the longhand). You can read about it [here](http://stackoverflow.com/questions/2925153/can-i-pass-an-array-as-arguments-to-a-method-with-variable-arguments-in-java) for example, it is used very often nowadays so it's best to be aware of its existence and in particular, its potential problems. – biziclop Apr 21 '15 at 12:37

0 Answers0