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

Автор Scorpy, 15 лет назад, По-русски

Вот код задачи 500 с SRM 400 (Условие) :

http://pastebin.com/SxWex824 (см. актуальную версию ниже)

В Visual Studio ответ на тест "999999874000003969" правильный, а на Арене выдает в ответ пустой вектор. Насколько я знаю на ТопКодере используется g++ компилятор.

В чем тут может быть проблема?

UPD: После исправления ошибки, на которую указал RiaD-WaW получилось так:

http://pastebin.com/jvZNYk79

Это всё ещё работает в Visual Studio и все ещё не работает в Арене.


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

15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

for( int i = 2; i <= sqrt(double(a)); i++ )

Для a = n* n sqrt может вернуть что-то типа (n-1).99999999 и a будет считаться простым.
15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

if(i==2)
                  cout<<abs( round(num)-num );

1.16415e-10

const ld eps = 1e-9;

Correct Return Value: Yes

Execution Time: 0.000s

Return Value:
{999999937, 2}


PS: упало на другом тесте из-за того что наоборот что-то нашлось, когда не надо
  • 15 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Да, так я уже пробовал. Попробуй запустить сис.тесты. На тест {"26293188972239280"} у меня возвращает пустой вектор, а у них нет.
    P.S. И что тогда делать? все возможные варианты eps исчерпаны... :-(
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +1 Проголосовать: не нравится
      Все же, кажется, наоборот, у вас - не пустой.
      Можно попробовать eps обратно чуток изменить, например поставить 2*e-10, но это вряд ли зайдет, все же чуток можно изменить логику(см.ниже)
15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

На самом деле может быть имеет смысл сделать так: привести то что получилось к целому и возвести это в степень обратно.Если сошлось - хорошо

UPD: да, код зашел
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кстати, имеет смысл указывать кроме номера SRM еще и дивизион, если хотите на задачу указать