Закончилась третья интернет-олимпиада, которая проходит одновременно и на тех же задачах, что и второй отборочный тур на ИОИП.
Предлагаю здесь поделиться впечатлениями и решениями (а также просьбами запилить ее в тренировки:).
P.S. Double kill
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | luogu_official | 150 |
Закончилась третья интернет-олимпиада, которая проходит одновременно и на тех же задачах, что и второй отборочный тур на ИОИП.
Предлагаю здесь поделиться впечатлениями и решениями (а также просьбами запилить ее в тренировки:).
P.S. Double kill
Название |
---|
А все могут войти в систему? Upd:fixed
В чем заключалась проблема с задачей B?
Почему два цикла for так долго работали?
может, на питоне не укладывается в 2 секунды
Странная задача. Был TL в одном тесте (причём тест не из последней группы), получил 60 баллов. Решил соптимизировать чуть ли не до массивов вместо векторов и scanf-ов вместо cin-ов. Потом послал по ошибке тот же файл (до оптимизации) — 100 баллов. Решал за O(n + t), никакого TL не должно было быть.
Жюри подняло TL с 2 до 4 сек.
Это можно было прочитать во вкладке c сообщениями.
Скорее всего, дело в scanf'е с пробелами.
Эмм...
Вот это упорно не заходило до поднятия TL
UPD: Данное (и еще одно) решение ловило TL с различным вводом/выводом. endl не применялся.
Мне говорили, что написали в цикле
cout << ans << endl;
и это TL'илось из-за flush'а.Как решалась 3?
Я не писал, но вроде как:
У нас есть 2 случая: строк меньше столбцов или больше.
Если столбцов мало, то решаем "в лоб" за k*w.
Если строк мало, то будем для каждой строки считать "формулу", по которой она получается изначально. Например после первого запроса 1 2 вторая строка будет 1+2 а после еще 1*2+2. Затем( после всех запросов) будем для каждого элемента честно считать по формуле его значение. Это работает за (h^2*w). Получаем решение, за примерно 10^(7.5). Должно заходить...
Если n > m, то m < sqrt(mn), поэтому можно делать просто то, что написано Если же m > n, то можно заметить, что любая строка является линейной комбинацией начальных строк, поэтому можно хранить коэффициенты, обозначающие, что в данный момент i-ая строка — это допустим, начальная i-ая строка плюс 2 j-ые строки плюс 5 z-х строк Так как строк мало(меньше корня), то любой запрос — надо просто прибавить к коэф x строки коэф y строки. Итого каждая операция за O(n). После всех операций легко восстановить ответ — просто для каждого элемента a[i][j] пробегаем по всем строкам и берем элементы, домноженные на соответствующие коэффициенты. Итого k * n + n * m * m < sqrt(nm) * nm
А как решалась D?
можно просто хранить список файлов и число d и поддерживать след. инвариант — если в списке есть пара<a, i>, то для i-го файла осталось скачать a — d. Тогда просто идем по порядку по файлам. Перед считыванием файла надо обновить наш список, например, так: Возьмем тот файл, который меньше всего. Если за время, прошедшее между двумя рассматриванием 2 файлов, он успеет скачаться, то записываем его в ответ, удаляем из списка и т.д. Потом просто обрабатываем новый файл — добавляем в список значение <a + d, i> Если пользоваться кучей для хранения списка, то получим n * log(n)
Народ,объясните пожалуйста, какой нужно было задать массив в задаче C,чтобы все прошло на 100%?а то во второй группе тестов четыре теста выдало превышение времени.
Чуть выше тут объяснили кажется решение, лично я писал тоже самое. К сожалению, из-за криворукости я тоже столкнулся с TL и стал делать втупую не когда количество столбцов строго меньше, а когда n + 50 >= m, и решение залетело. Я хранил такие массивы:
1) n + 50 >= m
тупо храним вектор векторов v[n][m], который мы и считали, делаем все втупую2) n + 50 < m
храним считанный вектор векторов v[n][m], а также вектор векторов add_str[n][n], где add_str[i][j] = сколько раз к строке i прибавилась строка j. Заполняем этот вектор, просто обрабатывая запросы (запрос x, y означает, что нужно сделать add_str[x][i] += add_str[y][i] по всем i от 1 до n). Ответ вроде после всего этого нетрудно получить.Точно? :)
И еще архивов с тестами нету. 404
Кому-нибудь удалось сдать В на питоне? На остальных языках я так понимаю проблема с TL исчезла после поднятия ограничения с 2 до 4 секунд.
Соревнование добавлено в тренировки 2014-2015 Цикл интернет-олимпиад. Второй отборочный тур ИОИП (1 февраля 2015 года), третья личная олимпиада (2 февраля 2015 года)