Сегодня (14 января) в 21:00 по Москве.
UPD: Coding phase начинается в 21:10.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Название |
---|
Кто знает, что значит Single Round Match 529 - Round 1?
UPD: говорят, я туплю. Типа эта надпись там всю жизнь была. Тогда нет вопросов)
Блин... Я не смог порешать. Но, походу, и к счастью. Почитал задачи сейчас. Так и быть:
1) Когда в первой задаче римские числа уже плохо. А когда они настолько маленькие, что при прямых руках их быстрее скопировать списком откуда-то и запаковать в массив - это просто отстой.
2) Вторая задача, конечно, крайне математическая и всё такое. Но это говно, а не математика! Где решение за корень более-менее очевидно, но писать его затраха^W помрёшь - настолько оно гадкое и мелкодетальное.
3) За условие во второй можно отрывать руки. Это уже садизм, а не "изюминка" задачи.
Вкратце:
важны только три ячейки: нулевая, первая и вторая. Третья всегда к концу внешних двух циклов обнуляется, четвёртая никак не участвует.
Короче, возможно три варианта. Назовём первые три ячейки - a, b, c.
1) a > b:
(a, b, c) -> (a-b, b+1, c+b), происходит 3b+1 шаг.
2) a=b:
происходит 3b+1 шаг и программа заканчивается
3)a < b:
(a, b, c) -> (a+c, b+1, 0), происходит 3a + 1 шаг.
Если аккуратно проанализировать, то становится ясно, что на каждой итерации b инкрементируется, периодически a и c возвращаются к исходному состоянию. Причём за один период прибавляется 4N + k к ответу, где k - количество итераций в периоде. А дальше нужно по*******ся и аккуратно это всё реализовать за корень.
И ведь блин обидно, что гораздо быстрее было его скопипастить, если он где был, или забить в строку! Хотя, это не отменяет того факта, что надо его уметь писать быстро и сразу правильно.
Я в конце подобрал формулу, там нету этой суммы :)
Стресс-тест заходил. Так обидно, жму на submit и contest is over.
UPD. Стресс-тест бажил.
Там задача посчитайте +- что-то очевидное от N. Причем основная сложность видимо предполагалась понять что такое m и что просят это. Хотя посчитать тоже удовольствие. Откуда взялась формула ivan.popelyshev я не понимаю. m - наименьший делитель N, отличный от 1.
По-моему это неправильная формула. При N=2 f=2 это выражение равно 7, а должно 9, при N=3 f=3 равно 22, а должно быть 27...
Вообще, кажется, что эта формула не выражается полиномом <= 2 степени, так как интерполяция для 2, 3, 5 (N = f в данном случае) выдает неправильный ответ для N = 7.
Nevermind
Порадовал участник Zero_Sharp у него в первой задаче была функция "int xuly(string s)", ну а че бы и нет?
UPD: Участник из Вьетнама
++*(int*)0
(int*)0 - приведение нуля к указателю, т.е. получение указателя на инт, показывающего в ячейку памяти с номером 0.
*(int*)0 - разыменование данного инта, т.е. получаем ссылку (int&) ведущую в ячейку 0
++*(int*)0 - инкремент инта, по адрусу 0 - Runtime Error - Access Violation
фунцкия используется для различных проверок, например
int n;
cin >> n;
ASS(1 <= n && n <= 1000);// получим Runtime Error, если n не удовлетворяет ограничениям.
В релизе отключены ассерты.
А какой стандартный вы имеете в виду? std::assert, такой существует?
знаю в MFC, в релизе, то что находтся между скобками ASSERT(...) не вычисляется VERIFY вычисляет, но не ругается если не Тру.
D1-1000's reference solution was wrong, therefore the final results are delayed. We apologize for inconvenience.
Раунд моей мечты.
"D1-1000's reference solution was wrong, therefore the final results are delayed. We apologize for inconvenience"
Интересно рейтинговый раунд будет или нет?
writer> sdryapko: most probably the round will still be rated
Passed.
Я умудрился сделать в 250 две ошибки, аннулирующие друг друга.
int toInt(const string &s)
{
int ans = 0;
for(int i = 0; i < sz(s); i++)
if(val[s[i]] < val[s[i+1]])
ans -= val[s[i]];
else
ans += val[s[i]];
return ans;
}
На самом деле я намеревался делать цикл до sz(s)-1 и вручную прибавлять val[s.back()]. Забыл и то и другое и отправил. Через несколько секунд после отправки заметил это. Хотел было исправить и переотправить, но понял, что:
а) s[sz(s)] = '\0', следовательно всегда будет выполнять else и добавление произойдет правильно.
б) в релизе скорее всего всем будет плевать на обращение к s[sz(s)].
Кстати, я не знаю, как стандартом оговорено обращение к s[sz(s)] для string? Это разрешено и всегда будет возвращен '\0' или это какой-нибудь undefined behavior?
upd: В 2010 студии в дебаге такое, например, падает:
string s = "a";
s[1];
В старом стандарте undefined behaviour, в новом:const_reference operator[](size_type pos) const noexcept;
reference operator[](size_type pos) noexcept;
1 Requires: pos <= size().
2 Returns: *(begin() + pos) if pos < size(), otherwise a reference to an object of type T with value
charT(); the referenced value shall not be modified.
UPD: В старом то же самое, только другими словами :)
The system test is too long . .Done :)