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

Автор CP_Sucks, история, 3 года назад, По-английски

Hi i can someone tell how can i overcome TLE in this problem using java

Problem : https://cses.fi/problemset/task/1164/

My Solution : https://hastebin.com/ilexoqukuw.csharp

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

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

If you are sure you have the right time complexity, it's most likely because you are using Java in CSES.

If you really want AC, use C++, otherwise don't worry about it.

»
3 года назад, # |
  Проголосовать: нравится +42 Проголосовать: не нравится

Why are you submitting solutions, I thought CP_Sucks?

»
3 года назад, # |
Rev. 4   Проголосовать: нравится +14 Проголосовать: не нравится

Reading the comments of C++ fanboys makes me want to laugh.

Jokes aside. Before I give you the actual answer, there are a few things that you need to take note of:

  1. You did not close your reader. You need to learn to release system resources even if sometimes the system does it automatically for you.

  2. You used a HashSet Iterator as though you expected it to always return you the minimum element in the Set. That's not correct. According to the Javadocs of HashSet, its iterator returns elements in no particular order. You are probably looking for a TreeSet.

Okay. Here are the updates that I did to your code that earned AC:

  1. The tm property of your Event class can be set as int instead of long because you are storing int in that property anyway. This gives a slight (but not significant) speedup.

  2. After studying the way you used HashSet, I realised that you want a data structure to do 3 operations: add, extract smallest element and remove smallest element. This can be done using a Priority Queue, which has better empirical performance compared to a TreeSet (which can also do the same things). This yielded considerable speedup.

  3. The most significant speedup was to improve the IO performance of your code. I replaced your FastReader class with the fastest implementation that I could find on GeeksForGeeks. This was the final optimization that yielded the AC.

On a side note, you don't seem to know Java well. Please learn to write it properly. Don't try to glue pieces of code that you peeled off the net into "something that simply works". This nonsense is typical of high school kids that don't know what they are doing. Learn your programming language well and it will carry you far beyond the world of CP.

AC Java Code