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

Автор sahilrathore03, 16 часов назад, По-английски

I was trying to solve this problem during contest.
Problem: 2061B - Kevin and Geometry

I wrote this solution for it which is an O(nlogn) solution but it is giving tle on the last pretest(10). I am unable to figure out the reason for this.
Submission: 302117530

Approach:
- Check the frequency of every element using map.
- If all elements are distinct, no valid solution is possible.
- If there is an element with frequency >=4 we can simply print that element 4 times since we found a square.
- If more than 1 elements have frequency greater than 1 we can print those 2 elements twice since we found a rectangle.
- Now only 1 case remains. We have a single element with freq>1 and we fix the isosceles side as this element. Now for the base and roof we can select any two elements such that | base — roof | < 2*side. For this we sort the array in O(nlogn) time and check adjacent elements.

TC: O(nlogn).
SC: O(n)

Can anyone help me out. Where is the problem with this solution?

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

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

Do not use unordered_map in any contest.

  • »
    »
    15 часов назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    It worked. Thanks a lot

  • »
    »
    14 часов назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    why unordered_map gave tle and map worked totally fine ?

»
15 часов назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Use map instead of unordered map. And it will pass.

»
15 часов назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Unordered map may be the issue try with ordered map .

»
15 часов назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
»
15 часов назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

about the problem , you dont need frequency .. just sort the array , get the biggest pair of elements that the are equal , erase them from the array , and iterate on it .. if you find an element a[i] such that : |A[i] — A[i + 1]| < 2 * C (here C is the value of the pair of equal elements) print a[i] , a[i + 1] , c , c