CodeChef invites you to participate in the September CookOff along with the ACM ICPC Amritapuri warm up contest at http://www.codechef.com/COOK14.
Time: 2130 hrs 18th September 2011 to 0000 hrs 19th September 2011 (Indian Standard Time - +5:30 GMT)
Details: http://www.codechef.com/COOK14/
Registration: Just need to have a CodeChef user id to participate. New users please register here
Problem Setter: David Stolp (aka pieguy)
It promises to deliver on an interesting set of algorithmic problems with something for all.
The contest is open for all and those, who are interested, are requested to have a CodeChef userid, in order to participate.
I have account on site, but I cant find button to register to contest. Where is it?
CodeChef userid == Account on site?
Yes they will be put up on the site immediately after the contest. The editorials are up here: http://www.codechef.com/wiki/september-cookoff%C2%A0contest-problem-editorials
А предпросчёт - просто для всех пар (L, R), L<=R, S = 100 - L - R, n = 18 считаем ответ. В source limit это влезает, а для 17 и так всё быстро работает, т.к. в кеш их процессора влезает.
У меня (2^n) * n зашло после того как заметил, что в маске вида XXX100YYYY пытаться использовать YYY не надо - добавил break
Там есть хороший хак, которые вполне возможно дает асимптотическую оптимизацию.
Если в маске есть два нуля подряд, то можно разбить ее на две независимые и просто сложить ответы для них. Масок, где нет двух нулей подряд совсем мало. Fibonacci[20]=6765. То есть реально вычислятся будет только для них. Но почему-то у меня стало только в три раза быстрее работать после этого хака.
Но может все это и неправильно, так как я так и не сдал.
UPD. Странно, в раборе именно все так и описано. Почему-же тогда не прошло.
так же делал, только не догадался добавить третий параметр, считал динамику для чисел длины <= len(x) - 1, где len(x) = "длина" нашего числа, а потом еще муздохался с остальной частью, от 10^(len(x) - 1) до x, в итоге не сдал(( теперь хоть буду знать как такого рода задачи решаются)
кст, можно ваше решение увидеть?
Можно ещё сделать так:
Препросчитаем для каждого отрезка длинной 100к ответ (локально, но впринципе в итоге можно и без этого). Дальше сделаем такую фишку. Для числе от 0 до 100к посчитаем сколько чисел x не больше данного имеют какой D(x) (т.е. для каждого числа храним 10 значений). Дальше будем делать следующим образом: введем функци F(x) - сумма всех D чисел не превосходящих x. Тогда ответ F(b) - F(a - 1). Теперь научимся считать F(x).
Разобьем наш интервал [0, x] на 2 части (до ближайшего числа кратного 100к). Часть до кратного 100к - посчитаем из препросчитаного (хотя как я сказал, это в итоге можно будет не делать скорее всего (вплане в ТЛ войти должно)). А потом разобьем оставшиеся числа на 2 части - остаток от деления на 100к и целая часть от деления на 100к. Заметим, что целая - часть у всех общая. А тогда сколько чисел имеют какой остаток можно легко посчитать пользуюся нашим препросчитанным массивом длинны 100к (ибо у числа D(x) = (D(целая часть) + D(остаток)) mod 10).
У меня такой хак не прокатил :D
Кстати да... Дальше верхняя часть тоже до 100к и её разложение можно использовать (вплане я использовал).
Время испольнения - 0.05 сек. Возможно у вас что-то не так (могу дать код).
Если бы не это, вполне контест можно было бы назвать "нормальным".
Индусы тут вовсе не причем :)
Это дело рук американца и белоруса.
К тому же, как показывает разбор: таки предложили лучше.
А без мультитеста очень сложно делать. Там каждый тест надо вручную заливать.