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

Автор Nagasai74, история, 5 лет назад, По-английски

Hello Everyone !!

1535B - Array Reodering

118383036

Can Someone explain me why this solution gave TLE Verdict ??

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

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

TLE is time limit exceeded. Which simply means make your code more efficient.

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

Maybe it's yours overloaded sort, try this, maybe it'll help: Also yours output is empty maybe infinite loop

for (int i = 0, j = n - 1; i < j;) {
    if (v[i] % 2 and v[j] % 2 == 0) {
      swap(v[i], v[j]);
      ++i;
      --j;
    } else if (v[i] % 2 == 0 and v[j] % 2) {
      ++i;
      --j;
    } else if (v[j] % 2 == 1) {
      --j;
    } else if (v[i] % 2 == 0) {
      ++i;
    }
  }
»
5 лет назад, скрыть # |
 
Проголосовать: нравится +43 Проголосовать: не нравится

Your comparator is wrong, it has to implement strict weak ordering, which essentially means that comparator should return true if you for sure want first element before second and false in any other case (including if you don't care about order)

The correct comparator would be

sort(a, a + n, [&](int a, int b){
    if ((a & 1) == (b & 1)) return false;
    if(a & 1) return false ;
    return true ;
}) ;
»
5 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
»
5 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Your comparator function is wrong .... You may have simply used greater()