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

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

Здравствуй, Codeforces!

5 августа 2015 года в 19:00 Мск состоится Codeforces Round #Pi для участников второго дивизиона. Участники первого дивизиона традиционно могут поучаствовать вне конкурса.

Это мой первый раунд на Codeforces. Надеюсь, что задачи вам понравятся и это даст мне стимул для подготовки новых раундов! Желаю всем быстрых Accepted и успешных взломов!

Хочу поблагодарить Михаила Мирзаянова (MikeMirzayanov) за замечательные платформы Polygon и Codeforces и за помощь в придумывании задач, Максима Ахмедова (Zlobober) за помощь в подготовке соревнования, Марию Белову (Delinur) за перевод условий на английский, а также моих друзей Данила Сагунова (danilka.pro) и Виталия Кудасова (kuviman) за прорешивание задач.

Участникам будет предложено 6 задач и два с половиной часа на их решение. Разбалловка будет объявлена ближе к началу раунда.

UPD: Разбалловка: 500-1000-1500-2000-2500-2500.

UPD: Разбор

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

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

I don't know about others, but I don't have any idea why the round name is "Pi". Would you make it clear please?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится -20 Проголосовать: не нравится

Hopefully there will be interesting and original math problems!

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

nezt PI Round #3141 ?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

Hello! Should I pronounce your name as Pi-kachu?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +42 Проголосовать: не нравится

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

"В раунде ожидается 2*Pi задач. Так как это число меньше семи, то проведение раунда для обоих дивизионов невозможно, only div 2. Но так как это число больше пяти, то на решение задач будет дано два с половиной часа."

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +20 Проголосовать: не нравится

I think I'll skip this one and wait for Codeforces Round #Tau

»
11 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится

Is it a rating round?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +240 Проголосовать: не нравится

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

W<...

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Maybe there will be a problem about circles ? :-)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +36 Проголосовать: не нравится

Maybe there will be a problem about circles ? :-)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

So this contest will be all about math problems? (#Pi)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +18 Проголосовать: не нравится

I think that this round shuld be irracionally long. Lets say 3h 8m 30s or 3.14h :)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

Здесь: Участникам будет предложено 6 задач и два с половиной часа на их решение.

Оповещение на почте: Продолжительность соревнования — 2 часа.

Где правда?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

i'm thinking what will a Codeforces Round #i be like... i'd be imaginary for sure :D

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

"Wish you quick Accepted verdicts and successful hacks." — interesting combination. To hack successfully, I need to lock a problem. Then someone hacks me (according to your wishes) and I can't correct my solution because I've locked it before. Very sad scenario.

Anyway, have fun everybody :)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

why 2:30 ??????

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

why 2:30 ???

»
11 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится -86 Проголосовать: не нравится

ВСЕМ УДАЧИ НА СЕГОДНЯШНИМ СОРЕВНОВАНИИ!!

ПУСТЬ У ВАС БУДЕТ БОЛЬШОЙ РЕЙТИНГ И ВСЕ ХОРОШО!!!

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

So i guess in each of the problems today we have to be introduced with the person "Mr. PI" :D :D :D

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

when you are wishing for some body successful hacks you are wishing for some body else unsuccessful

submits!!! i don't think it's a good wish!

thanks ;)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +15 Проголосовать: не нравится

2.5 hour = 6 problems? So I guess P1kachu prepare a nice problem F for us to solve...

»
11 лет назад, скрыть # |
 
Проголосовать: нравится -50 Проголосовать: не нравится

define in_round_#pi ++

int RP;

int main(){ while(RP)RPin_round_#pi; return 0; //By the way,thanks to writer }

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +34 Проголосовать: не нравится

Round #404 will be declared as round #Error or round #NotFound

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +23 Проголосовать: не нравится

That proud moment when a blue coder prepares a CF round :D
Hats off !!! keep it up :D

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

This is the first contest i join ever on codeforces :)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем Zlobober (предыдущая версия, новая версия, сравнить).

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

It has been a long time since the last Div2 contest.. It's obvious that the number of registrants is very large this time and people are eager for such an event.. Let's enjoy

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

So since there are 6k+ participants, on a scale from Google.com to contest.Bayan.ir, how down is Codeforces.com going to be ?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

6278 people registered which is more than 6274 people registered for good bye 2014

out of 6278 registrants 935 people are unrated

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

The first round was written by Expert user that I have ever participated!

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +12 Проголосовать: не нравится

What on earth is pretest 19 in Problem E?

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    I guess you're not finding the bridges correctly. I got WA 19 because of a caveat in my solution, I only check for edges that definitely are on the shortest path ONLY from the start and the end, but there could actually be bridges in the middle of the path too. An example edge formation , start = 1 , end = 8 : 1 2 1 3 2 4 3 4 4 5 5 6 5 7 7 8 6 8

    The edge 4 5 is definitely on the shortest path since it is a bridge in the shortest path graph. Hope it helps .

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +17 Проголосовать: не нравится

Problem E with modulo based hacking was pretty funny.

I had a generator that generates a input for any mod. Some guy from my room sent his solution in the last moment to make sure that I can not hack him. :)

»
11 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

Finally solved C with 2 seconds on timer :( That's embarrassing.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How to do Div2 c Geometric progrssion?

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    You can support 2 maps, left and right. When you iterate over the sequence, you should add left.get(a[i] / k) * right.get(a[i] * k) to the answer, and then add current element a[i] to the left map and remove it from the right one.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Spent 30 minutes trying to find the problem with this attempt at problem C. Can someone lend a hand?

http://pastie.org/private/mmg81uzwfniinmxabqa2rw

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Я уже и забыл, как дооолго запускаются систесты.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

What was test case 5 of D? I used a solution that kept track of valid intervals where battleships could be placed: if bob's shot interrupted an interval, then I split it into 2 intervals, and for each interval I calculated IntervalSize / SizeOfShip. If this was less than NumberOfShips, then I printed that index and stopped the program. At the very end I printed -1 and ended to catch the case where it is undeterminable. What is wrong with this approach?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What's the intended solution on D?

I tried keeping a sorted vector of pairs, representing all uninterrupted segments where you can place ships. Every time you fire a shot, you find the segment that shot is in and split the segment in two. Used binary search to make the segment searching faster, but my solution was wrong on case 5.

Is the idea wrong, or did I mess up my implementation?

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

Eh, I believe the "two weapons cannot touch" part in D should have been explained more clearly... I was thinking it just meant a cell cannot belong to more than one weapon (and I guess so did everyone getting WA on pretest 5).

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

The round was awsome. I enjoyed a lot E and F. Congrats for the round. Also , was F a dp in O(N^3*K) ?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Can someone help how to solve C ?? :(

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What was the idea for keeping track of the number of shortest path? Does it use Dijkstra?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Can anyone who solved F explain a solution? The problem seemed like hell to me :D

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

    DP; you put the pairs from largest to smallest. States are "the blocks you put so far are in the interval [i,j]". There are just 3 possible transitions from any state and you just need to check if any in/equality becomes invalid for each of them.

    The simplest implementation is O(KN3), which definitely passes.

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится

    dp[left][right] — in how many ways can we fill blocks 1... left and right... 2N with small numbers (numbers lower that those left for interval left + 1... right - 1. We must consider 3 cases: adding two new equal numbers in left + 1, left + 2, or in left + 1, right - 1, or in right - 2, right - 1. For all 3 cases we must check is everything would be ok for them — those two places are equal to each other but lower than remaining places in left + 1... right - 1.

»
11 лет назад, скрыть # |
Rev. 4  
Проголосовать: нравится -7 Проголосовать: не нравится

OMG i forgot to remove debugging code and the stderr flushes made me TLE on problem D.... ;(

for(auto i:my)cerr << i.first <<":"<<i.second<<endl;

http://mirror.codeforces.com/contest/567/submission/12367438

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

Can anyone explain me how to solve problem D??

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится

    One way is to find result by binary search. Then, we mark some cells as blocked and we need to count maximal possible number of ships. Say if you need more explanation.

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

    The rough idea is to maintain the maximum number of ships you can put on the board.
    Notice the fact when you hit a spot, you are splitting an interval(between 2 previously-hit spots) into 2 intervals. With that, you can calculate how many ships can be put on the original interval and on these new 2 intervals, and update the number we're maintaining.
    Use std::set to store previously-hit spots.

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

    Let's use a some set, which will keep disjoint segments.

    Also let's keep some value T which means what is the maximum number of ships we can arrange on a board.

    When we add a segment to the set, we must increase T by some value x, which means the maximum number of the ships we can arrange on current segment. This number is equal to (len + 1) / (a + 1) where len is a length of the segment and a is the length of the ship

    At first let's add segment (1, n) to the set.

    So, when the cell c is coming, let's find a some segment(l, r) which keeps c (l <= c <= r). We decrease T by (len(l, r) + 1) / (a + 1).

    Then we add segments (l, c - 1) and (c + 1, r) to the set and increase T by appropriated values.

    If we processed current operation and T is less than k, answer will be equal to the number of operations we processed already.

    For keeping segment we can use a simple set of pairs. My solution: 12365410

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +67 Проголосовать: не нравится

Nice problems vovuh! I like C and F especially. Hope to see more rounds from you.

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

I got stuck (kept failing test case #13) in problem B. Embarrassing, but this was my first contest. Here is my solution:https://ideone.com/G5fuEl Can some one give me any ideas? I can't sleep, keep thinking about it :|.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What is the idea of E?

  • »
    »
    11 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится +11 Проголосовать: не нравится

    My solution is to dijkstra 2 times, one from s and one from t

    for each edge u->v if dist(s->u) + c(u,v) + dist(v, t) == dist(s, t), u->v may be a "sure" edge

    Take all those edges and eliminate the direction, we can find the bridge by simple DFS.

    Note that there may be multiple edges between two vertexes. I failed E during the contest because of that :(

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In problem C, what would be the answer if k=1 ??

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

public void solve(int testNumber, InputReader in, OutputWriter out) { int n = in.readInt(); boolean[] t = new boolean[1000010]; int cap = 0; int cur = 0; for (int i = 0; i < n; i++) { String s = in.readLine(); String[] ar = s.split(" "); if (ar[0].charAt(0) == '+' && !t[Integer.valueOf(ar[1])]) { cur++; t[Integer.valueOf(ar[1])] = true; } else if (ar[0].charAt(0) == '-' && t[Integer.valueOf(ar[1])]) { cur--; } else if (ar[0].charAt(0) == '-' && !t[Integer.valueOf(ar[1])]) cap++; cap = Math.max(cap,cur); } out.print(cap); }

my code above for problem B is incorrect, because the bold line, without that line, the code is correct. But the number assigned to people is unique, why can someone take same number twice?

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

Спасибо balalaika, можете не обращать внимания.

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    lower_bound(Value) — первый элемент item >= Value

    upper_bound(Value) — первый элемент item > Value

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

      Да я знаю про это.

      Можете дать тест, в котором они дают различные ответы?

      • »
        »
        »
        »
        11 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится 0 Проголосовать: не нравится
        10 2 4
        3
        5 6 1
        

        Этот тест из задачи на котором ваша программа и валится

      • »
        »
        »
        »
        11 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +3 Проголосовать: не нравится

        Не знаю, чем Test#8 не устроил, но я вижу такую ошибку:

        Допустим, есть интервал (x, y). Вы стреляете по x. Тогда (x, y) должен превратиться в (x+1, y). В неверном вашем же коде представим себе ситуацию следующую: есть интервал (1 N). Стреляем по 1. Тогда у вас итератор будет указывать на несуществующий элемент, ибо вначале вернется итератор на (1 N), который есть begin(), а потом вы его декрементируете и работаете с несуществующим итератором.

        Надеюсь, что помог.

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    забьем на it-- пока. тогда в 1 случае итератор будет указывать на элемент, поле first которого строго больше x, во втором — не обязательно.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Рейтинга долго нет. С кодэфом что-то не так или опять бан читерам роздают?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Wow the problemsets are really nice. It's hard to believe that it's prepared by a blue coder.

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +4 Проголосовать: не нравится

    That's because, this rating shows the measurement of competitive programming skill which is different from problem inventing skills. There are many cases where enough knowledge doesn't help the subject to do better in competitive programming.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Was this contest Unrated???

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Я, наверное, тупой, но в чем косяк? http://mirror.codeforces.com/contest/567/submission/12376471

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can someone point out the mistake in this code?

Problem D

Thank you in advance.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

While solving E, i had to keep track of number of shortest paths passing through a particular edge. But this value can exceed 10^18. I used hashing modulo 2 large primes to keep track.

Is there any other (deterministic) workaround to this?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

used coordinate compression in c :P

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

It's just div 2, but I'm very happy anyway. Nice problems! :D

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

It's just div 2, but I'm very happy anyway. Nice problems! :D

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Thanks for a great contest!

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Hello, this is my first contest. I'm just curious about one thing : when does the rating change after a contest?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Your problems are really amazing. Thank you :)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Подскажите, пожалуйста, в чем ошибка?
http://mirror.codeforces.com/contest/567/submission/12378484

  • »
    »
    11 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +13 Проголосовать: не нравится

    Посмотри на свой ответ и на ответ жюри. По нему очевидно, что у тебя переполнение. Замени все на лонги.

    P.S. при том очевидно, в каком месте нужно заменить

»
11 лет назад, скрыть # |
Rev. 5  
Проголосовать: нравится -7 Проголосовать: не нравится

Thank you for the contest. Can you update top 5 contestants as well :D ?

Update: Down voters, so you don't want to see your name when you are in top 5?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can anybody help me check my code of problem E: http://mirror.codeforces.com/contest/567/submission/12382102

Thanks!

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Could someone explain this testcase (which is the 37th) of Problem E?

10 10 1 10
1 5 178
1 8 221
2 7 92
2 8 159
3 5 55
3 6 179
3 10 237
4 8 205
5 6 191
8 10 157

The output is NO for all edges except the two that lie on the unique shortest path of length 378, for which the answer is YES. What I don't understand is why the answer for all other edges is NO. Let's take for example the path (1 — 5 — 3 — 10 ) of length 470. The first and the last edge could be reduced by 93 to give a path of length 377 in which case they lie on the unique shortest path. I probably misunderstood something in the problem statement. Thanks in advance.

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится

    I had the same problem.

    In the statement it says The road is directed from city ai to city bi. In this test case you can't go from 5 to 3 and therefore the path (1 — 5 — 3 — 10) doesn't exist.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

It's my first contest in codeforces and I enjoyed it very much. Wish your next round,and I hope I can do better then.

»
11 лет назад, скрыть # |
Rev. 4  
Проголосовать: нравится +1 Проголосовать: не нравится

could someone tell me why this solution gives TLE for problem D? It's run in O( m log(m) ) 12387839

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Кто-нибудь может объяснить мне, в чём смысл предварительной регистрации?! Из-за неё пропустил соревнование :(

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

I am not from the top 5, but I love to see the winners' names in the updates :)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Подскажите пожалуйста, а в раундах только индивидуальное участие допускается? Команда может участвовать или нет?

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Смотря в каких раундах. В обычных только индивидуальное участие, в специальных иногда могут соревноваться и команды.