|
|
вернуться в форумIdea O(N) Я долго бился с этой проблемой несмотря на то,что сложность <200. Я пытался решить с помощью ДП,но там очень много случаев и сложная реализация. Задачу можно решить логически: во-первых,первые символы "<" и последние символы ">" ни на что не влияют,поэтому удалим их; во-вторых,если слева есть хоть один ">",то он в ЛЮБОМ случае будет меняться с КАЖДЫМ "<" РОВНО один раз(если "<" существует). Т.е. нас не интересует конструкция строки. Нас интересуют числа Z[1],E[1],Z[2],E[2],...Z[p],E[p],где Z[i] -количество ">" в последовательности 00000000...00000,а E[i]- количество "<" в последовательности 11111....11111111. Т.е. нашу строку делаем в виде 00...0011..1100..0011..11........00..0011..11,где P чередований (я ">" заменил на "0",а "<" на "1") . Тогда ответ есть Z[1]*(E[1]+...E[p])+Z[2]*(E[2]+..+E[p])+...+Z[p]*E[p]. Сумму можно посчитать через частичные с помощью ДП. Асимптотика O(N). Re: Idea O(N) Послано BZz13 28 ноя 2015 22:15 madness :D Re: Idea O(N) Imho, it can be solved by easier way. Let's create the array, where put 0 instead of '<' and 1 instead of '>'. Then answer is number of swaps in bubblesorting of this array. Re: Idea O(N) I went exactly this way and my solution looks very easy! >><<>< 110010 | counter = 0 Now we go from the right and move every 1 all the way to the right and count the moves (we don't need to actually move anything but you can see everything better this way) 110001 | counter = 1[4->5] 100011 | counter = 1 + 3[1->4] 000111 | counter = 1 + 3 + 3[0->3] = 7 I got AC with this O(n) Re: Idea O(N) Послано Zteeks 2 июн 2017 01:06 Thank all of you) Very helpful! Get my AC using this solution Re: Idea O(N) Moving? Overkill. Just count how many inversions are there. I don't remember exactly, which symbol, '<' or '>', should be considered as 1 and which as 0. Don't even try to memorize the sequence. Just have a counter and increment it each time when encountered 1 and add counter value to answer each time when encountered 0. |
|
|