Hi!

After a long break, on Jan 25, 17:35 MSK will be held Educational Codeforces Round 17.

You will be given 6 tasks and 2 hours to solve them. The problemset, in my opinion, turned out to be well balanced and should be interesting for both novices and experienced participants. Task F may end up beneficial for many reds :)

The ideas for problems are by MikeMirzayanov and me. Thanks to fcspartakm for helping in preparation of this round.

I hope you will enjoy the problems and good luck!

**UPD:** The contest is over. Probably a little bit on the hard side for the beginners? Sorry! Editorial will be in the form of hints and will appear shortly.

**UPD2:** Editorial

**UPD3:** Challenge phase is over! Congratulations to winners:

Also, top hackers!

- halyavin +249 : -35
- step_by_step +82 : -11
- -Morass- +51 : -141
- MishaPrigara +50 : -5
- uwi +46 : -9

If you want to share your ideas about tasks for next Educational Rounds, you can use the new problem proposal form. Please, use prefix "er-" in the name of the task so that we know that it is for Educational Rounds.

Can we hope for rated educational rounds some day?

The the

"educational"name may change!well, mike mentioned in the blog on the introduction of educational rounds that educational rounds might be rated in the future. I did not ask for anything unreasonable. Give me my upvotes :)

Well, if it is rated it would be less "educational", and we can get under rating pressure. So if the round is unrated, you could care less about your rating and learn care-free.

Let's make educational rounds rated like atcoder. In atcoder beginner contests are rated for beginners. More beginners will participate to rounds.

How many problems will there be?

I think 6 or more problems will be , (He said :: Task F may end up beneficial for many reds )

Like they were usually held, there will be 6 tasks for 2 hours. I'll update the blog with this :)

After a long time Educational Round is there, Hoping for good and interesting questions. All the best !!

if we want to suggest some problem to the educational round, who we should contact???

maybe this Propose a Problem tab

I guess here you can Propose a Problem to add it to rated rounds, In the past we used to contact Edvard ,Anyway waiting for a response from the admins :D

Rated?

NOO

My prayers are listened . Thanks MikeMirzayanov.

I was really missing Educational CF Rounds .

Thanks to fcspartakm , HellKitsune for their effort .

How many problems? 6 or 7 o5 5

"You will be given

6 tasksand 2 hours to solve them." Which part did you not understand?Thank you

check

`history`

I hope that my rating will change in this education contest..... :)

It is unrated contest. You can improve your skills and become beneficial with some good problems.

I know it... :) thís is my new account...

Last my account is very bad.. so... I hope with this contest i'll change it...

And good luck to you. :)

Good luck to you too :)

Why there is not many users with contributed task ? Is it your decision, or nobody wants to give problems ?

Since Nobody Has Asked, Is It Rated?

You are expert. And you don't know that educational rounds are not rated.

http://codeforces.com/blog/entry/49997?#comment-339488

I don't have to feed Bessie today (I'm a gaucho, you know), so I can take part in this round. Let's hope some nice problems!

Looking forward to see the problem proposal system adapted to educational rounds :)

Many people want Educational contests to be ratede. May be we should vote for this?

I think that rating Educational Rounds would be like giving points to soccer teams for what they do during practice sessions.

I believe the main purpose of Educational Rounds is to learn important techniques and algorithms and the people that take part in them are either like "I'll participate and see if I learn anything new" or like "I'll take part until I get bored". Rating such an irregular contest would be a mess.

Ignore

does this contest increase or decrease rating points?

educational means unrated. you wont lose or gain rating.

thanks!

how does people generating prime numbers for problem A?

I was thinking about sieve-ing it, but 10 ** 9 seems too big.

tho, in the end, ruby's 'prime' library is fucking cheat.

Don't ask such questions during the contest!

sorry, I thought it's fine since this is unrated. I'll note it.

if i is divisor of n, then n/i is divisor of n, so we are only enumeration to sqrt(n), we can solve the problem

I didn't need to generate prime numbers for A. I just generated the numbers that divides N that are less than or equal to sqrt(N). Every other divisor can be generated from these numbers.

If query K is less than the size of the divisor array just print the divisor. If K>divisors.size() and K<=2*divisors.size() than you can generate the divisor by dividing N to K-divisors.size()th divisor from the end in the array. If K>2*divisors.size() print -1.

hmm.., I didn't know 10 ** 7.5 is still not TLE.

10^8 is about the safest number to assume that you dont get TLE

My first contest on this site it was fun simple straight to the point

I think 2h isn't enough :(

http://codeforces.com/contest/762/submission/24127457

isn't this O(n log^2 n) ?? why would it TLE ?????

You should have implemented it in and it would have been much faster.

My N*log(N)*log(N) code passed :)

Here is link.

In your dreams)

Failed :(

nice problems, waiting for editorial :)

I am refreshing every 5 seconds.I reallllly want to know the solutions of D and E

When will we be allowed to submit after the contest.

UPD: problems already in practise.

What is test case 2 in problem B ?

SO many WAs

The answer is out of the range of int in C++

I had made a really stupid mistake.

instead of sum+=x[i], I had coded sum+x[i] instead :/

hah, I got WA cuz I forgot to user long long instead of int

Since now is open hacking period,is the edtorial going to be posted after the period ends?

Can we discuss solutions in hacking phase?

can someone describe solution for C, i'm guessing it's related to LCS.

No. LCS will be N^2 which is too much for the given time limit

actually it doesnt have anything in common.

I tried BS.

Same.Binary-search rocks

no, i did with greedy + binary search code here

Yeah. BS means binary search :)

someone describe the solution pls!!

i would,but i don't know if i am allowed until hacking period ends

Actually, the hacking phase is just there to include all test cases for the problem, and since it's also not rated, it doesn't affect that we discuss solutions. In fact, discussing will probably be better for finding all corner cases, if more people understand the basic solution.

Binary search on the contiguous segment's length.

First, precompute this

precomputeThe above code assigns forward[i] to be the

smallestindex ofasuch that b[0:i] forms a subsequence ina. Similarly, backward[i] is thelargestindex ofasuch that b[i:b.length()-1] forms a subsequence ina.Then we BS on the length of the segment to delete.

For each starting position of the segment to be deleted, check if

`forward[start-1] < backward[start+segment_length]`

. If for any starting position, this above relation becomes true, then we can also try a smaller segment size, else, we must try a bigger segment size.i did it so:

we index i from 0 to length of b

we say that from 1 to i we want to have the substring in the final result.We bs the position j,with the condition that if we erase the substring i....j then we get a valid result.and the condition in BS would be forward[i]<backward[mid]

My solution is

O(n). Letdp[0][i] be the length of the longest prefix ofbthat is a subsequence ofa[1:i], anddp[1][i] be the length of the longest suffix ofbthat is a subsequence ofa[i:len_a].We can easily see that if

a[i] equals tob[dp[0][i- 1] + 1] thendp[0][i] =dp[0][i- 1] + 1, otherwisedp[0][i] =dp[0][i- 1]. Do the similar thing fordp[1][i].We will find the position that

dp[0][best] +dp[1][best+ 1] is maximum, then print the firstdp[0][best] characters and lastdp[1][best+ 1] characters ofb.Source code: 24121085

your solution is very interesting.thank you for sharing it!

cute idea

thanks.. but can't get it

Let

P_{ i}be the set of indices ofAwhich form the subsequence forB[1..i]. Similarly, letS_{ j}be the set of indices ofAwhich form the subsequence forB[j..m], wheremis the length ofB.That is, store the indices of

Afor the longest prefix and suffix ofBthat is a subsequence inA.Iterate over indices of

Aand try to maximize the length ofP_{ i}+S_{ j}, which is equivalent to minimizing the length of the segment erased fromBwhich is [(i+ 1)..(j- 1)].Submitted Code

Well, I'm getting worse every round. I knew how to solve A task, but after runtime error I started to solve problem E... Solved A 18 minutes before the end. :( Why am I so bad?

Guys, how do you solve these problems? I am trying hardly to do my best, but no significant result in almost a year time. Even these "simple" educational tasks. What could you suggest? Thanks.

Same for me. Can't solve more than 2 problems per contest :(

on codeforces educational doesn't mean simple.and don't worry,after just 1 year i didn't know much.You have to patient and you will get better

How yow improved your coding skill? Truely inspired after seeing your graph. :)

Just practice.research what you don't know.If you do this you should improve pretty fast.

These problems aren't simple,just the ideas maybe are well-known and i think this helps a lot to build your set of ideas when you solve a problem.

I am not able to see my standing in the contest, please help

I got it but it wasnt being shown in the main page :/

Hello, I have a short question — someone hacked my solution, I fixed something. Is it somehow possible to check, whether my new solution works fine on 'hacking' test or I would need to wait until the end of hacking phase?

What's the hacking test for C?

I got hacked on a test like this:

aa

a

a aba

Sometimes works I guess

Good day to you,

I got many of hacks with A=10^5*'c' B=9*10^4*'c'

I.e., string full of "same" characters and one shorter string {two short strings might work too}

For problem C . I have a input

axbxcxdxexfxg

abcwwdewwfg

why ans is abcfg ? shouldn't it be abcdefg ?

because :

abcdefg we have to remove 4 characters

abcfg we have to remove 6 characters .

In this problem they said removing minimum characters . So It should be abcdefg . why abcfg ?

Can anyone explain ?

You have to remove the minimum possible number ofconsecutive(standing one after another) characters from string bI don't understand C problem. please anyone explain it..

Good day to you,

well you have two strings, and you have to remove

EXACTLY ONEconsecutive passage [i.e. "K" consecutive characters] form second one, so it becomes sub-sequence of first string {i.e., all characters from rest of second string appear in first string [not necessarily consecutive] in same order}HINT: As you can see [from statement], you remove the part from middle, suffix or prefix so (if anything) only what can remain is: "suffix", "prefix", "suffix+prefix" or "whole string"Good Luck & Have nice day!

thanks -Morass- You made my day.....

Thank you -Morass-

Can you please tell me how to implement after suffix+prefix string is a subsequnce of string A . ? Suppose :

axbxcxdxexfxg

abcwwdewwfg

i got abcfg , now how i check abcfg is a subsequence of String A ? There has a bruteforce way , check 'a' is where in string A , if found break , then search for the next character 'b' , in string A after that index where 'a' was found . I need efficient way . Is there any ?

Good day to you,

firstly, (to second comment), as I said, it must be

EXACTLY ONE BLOCK OF CONSECUTIVE CHARACTERSso "abcdefg" is not possible (you removed two consecutive blocks)secondly, how to do it efficiently? Well you can do iteration through array (from back to front), precalculating array of "next" (code — if you "un-think" the macros), so that it will tell you (on every position) next occurrence of ANY character on O(1). The precalculation costs O(N*ALPHABET).

The same can be done for "back".

Hope it is strait-forward now {you can use two pointers or similar to get the answer then}.

Good Luck & Have Nice Day!

For problem C . I have a input

axbxcxdxexfxg

abcwwdewwfg

why ans is abcfg ? shouldn't it be abcdefg ?

because :

abcdefg we have to remove 4 consequtive characters

abcfg we have to remove 6 consequtive characters .

In this problem they said removing minimum characters . So It should be abcdefg . why abcfg ?

Can anyone explain ?

UPDATE :

I UNDERSTAND THEY said Exactly one consequtive string not more than one .I think there is a problem with the judge. Lots of "Judgement failed" in problem B

Only 3 accepted :/

Yeah, don't worry, we will rejudge it soon!

Auto comment: topic has been updated by HellKitsune (previous revision, new revision, compare).Can anybody tell me what is wrong in my code. Why is it giving runtime error? http://codeforces.com/contest/762/submission/24149549

Compare function must return false on equal elements. I challenged so many solutions with this error...

How does it matter? After all they are equal

This is STL requirement. If your comparator doesn't satisfy it, STL functions like sort may crash.

Thank you so much.