Блог пользователя ravelo1991

Автор ravelo1991, 12 лет назад, По-английски

In the problem B the solution is very short and probably every body make a n*log(n) solution by sorting the array and then pass over the array in O(n) to get the solution. There should'nt happen things like this: This is my code and it was Time Limit Exceded only because it was made in java.

int n =nextInt();
        long x = nextLong();
        long[] a = new long[n];
        for (int i = 0; i < n; i++) 
            a[i]=nextLong();

        Arrays.sort(a);
        long resp = 0;
        for (int i = 0; i < n; i++)
        {
            resp += (x*a[i]);
            x--;
            x = Math.max(1,x);
        }
        out.println(resp);

I would like to know who is in charge of this king of issue?

  • Проголосовать: нравится
  • -5
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

The same happened to me, it's only after the contest, that it was accepted when I replaced the int[] arr = new int[n] with Integer[] arr = new Integer[n] ..

And it makes me confused, as I made a benchmark to compute the difference of sorting between int[] and Integer[] using Arrays.sort(), Integer[] was 2.3 slower than int[].

Any idea, anyone?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

There are special tests on which solutions in Java with sorting of primitive data types arrays work too slow: 1, 2 (first link in Russian only, use Google Translate).

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

As 1e9 says, Arrays.sort uses quicksort, which could be O(N^2).

Collections.sort use merge sort, which is always O(N*log(N)).

You can check it at the documenation for Arrays and Collections

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -16 Проголосовать: не нравится

I think, Scanner is too slow..