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

Автор komendart, история, 7 лет назад, По-русски

870A - Поиск красивых чисел Идея, подготовка, разбор komendart

870B - Максимум максимума из минимумов Идея DPR-pavlin, подготовка, разбор mHuman

870C - Максимальное разбиение Идея, подготовка, разбор komendart

870D - Что-то там c xor запросами Идея, подготовка, разбор mHuman

870E - Точки, прямые и неоригинальные названия Идея, подготовка, разбор komendart

870F - Пути Идея, подготовка, разбор komendart

871E - Восстановление дерева Идея MikeMirzayanov, подготовка fcspartakm, разбор mHuman

Также спасибо координатору KAN, тестерам ifsmirnov, vintage_Vlad_Makeev, AlexFetisov и другим людям, участвовавшим в подготовке задач.

Tutorial is loading...

Код (C++) 31365874

Код (Python) 31365844

Tutorial is loading...

Код 31366254

Tutorial is loading...

Код 31365909

Tutorial is loading...

Код 31366223

Tutorial is loading...

Код 31365959

Tutorial is loading...

Код 31366002

Tutorial is loading...

Код 31368704

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

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

emmmm... where is 870F's solution?

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

I want to know how to proved the conclusion of B "*Also it can be proved that for k = 2 the answer is the maximum of the first and last element."

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

    Consider an array of length n. You know that 2 candidates for the answer are arr[1] and arr[n]. You can get arr[1] as the answer by using the partition {[1,1], [2,n]} and you can get the value arr[n] as the answer by using the partition {[1,n-1], [n,n]}.

    Let the actual answer be some value at index i in the array, so arr[i] > arr[1] and arr[i] > arr[n]. Now, arr[i] has to be minimum possible value in its own subsegment. But, any subsegment containing arr[i] has to contain either arr[1] or arr[n]. In either of those cases, arr[i] is no longer the minimum in its subsegment and can never be the answer.

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

"If minimal number in splitting is neither 4 nor 6 nor 9 than this number will have some non-trivial splitting by induction."

"If this number either 6 or 9...."

Why aren't we considering the supposed non-trivial splitting in Problem C?

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

    If there is some number in splitting is neither 4 nor 6 nor 9 and not any other prime number (to mantain validity of splitting), we will always be able to split it down further. For example, suppose in your splitting you have 26, you can break it down further to 4+4+4+4+4+6, if you have 19, you can break it down to 4+6+9 and so forth. You can even prove this formally with strong induction, with extra care for numbers that don't have a valid splitting

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

There is an O(1) solution for problem C Div2. I couldn't find concrete proof for it other than very weak induction. The solution arises from a pattern. All numbers besides 1,2,3,5,7,11 have answers. You can get this answer by dividing the number by 4 and subtracting 1 if the original number is odd. The pattern can be seen in the DP table.

Here is my implementation: 31373891

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

    Could you please explain how did you find this solution?

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

    Actually, authors solution is also O(1). Let me prove your solution:

    Since 4 in smallest composite number, we have to use 4 as much as we can, so, lets see some cases with mod 4:

    if(n%4==0) then answer is obviously n/4

    if(n%4==1) we have to find smallest number which is composite and have 1 mod 4, so it is 9 and if we subtract 9 from n result is divisible by 4, then answer is 1+(n-9)/4 (here if n<9 then answer is -1)

    if(n%4==2) we do same thing with n%4==1, so smallest composite number which have 2 mod 4 is 6 and answer is 1+(n-6)/4 (here if n<6 then answer is -1)

    if(n%4==3) smallest composite which have 3 mod 4 is 15, also, we can express 15 with sum of 2 composites, 6 and 9, so answer is 2+(n-15)/4 (here if n<15 then answer is -1)

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

in problem 870D ,

when n is an odd number . the answer is unique, and we can obtain it by only n questions.

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

How is a picture defined in div2-E?

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

The following is a C++11 solution for problem 870A - Search for Pretty Integers using bitsets.

31363923

The idea is to have one bit for each digit between 1 and 9 in a bitset< 10 > representation of each sequence to indicate whether or not the corresponding digit exists in the sequence.

Then, the digits between 1 and 9 are checked iteratively in an increasing order for a digit (x) that exists in both sequences. If this digit is found, then it is the one-digit solution.

Otherwise, compute x and y, the minimum digits in the n-digit and m-digit sequences. It is guaranteed in this case that x and y are not equal. The solution is then the two-digit number expressed as max( x, y ) + 10 * min( x, y ).

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

The solution of div-2 C can be made more easy. As we Know 4 is the minimum composite number so if n % 4 == 0 then ans will be 4. In the other case, we know that for a number there we can use 1 "6" or 1 "9" or both ,and other numbers are 4 or 0. So we should check:

if n-6 % 4 == 0 ans is (n-6) / 4 + 1. // use 1 "6" and others are 4 or 0 else if n-9 % 4 == 0 ans is (n-9) / 4 + 1. // use 1 "9" and others are 4 or 0 else if n-15 % 4 == 0 ans is (n-15) / 4 + 2. // use 1 "6", 1 "9" and others are 4 or 0 else ans is -1 This is my code :http://mirror.codeforces.com/contest/870/submission/31454655

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

Hellow

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

The solution of div-2 C can be made more easy.
As we know that 4 is the minimum composite number so
if n % 4 == 0 ans will be n / 4;
In other cases, as we know that we can use 1 "6" or 1 "9" or both, with 0 or 4 to split a number in maximum possible number of Summands. So we should check:
if (n-6) % 4 == 0 ans is (n-6) / 4 + 1 // using 1 "6" with 4
else if (n-9) % 4 == 0 ans is (n-9) / 4 + 1 // using 1 "9" with 4
else if (n-15) % 4 == 0 ans is (n-15) / 4 + 2 // using 1 "6" and 1 "9" with 4
else ans is -1;
my code : http://mirror.codeforces.com/contest/870/submission/31454655.
Note : Be careful about negative mod.

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

I coded the solution of Problem Div-2 E. But getting TLE on test 23. Could anyone help me figure out why? My Submission: http://mirror.codeforces.com/contest/870/submission/31497042

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

Today I learnt not to use the C++11/GCC 5.1 submission option. I takes basically all of the 3s to read the input data, leaving no time for the solution to run! The C++14/GCC 6.4 option is about 3 times faster. Compare http://mirror.codeforces.com/contest/871/submission/33889909 and http://mirror.codeforces.com/contest/871/submission/33889988 — same code (apart from a debug comment) which exits right after reading the input data on a maximal dataset, totally different runtimes.

I am using ios::sync_with_stdio(false) and cin.tie(NULL).

GCC 6.4 is still about twice as slow as GCC 5.4 on my 7 year old machine — how old are the CF machines?

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

Can someone explain the following test case for problem A?

9 1 5 4 2 3 6 1 7 9 8 9

the smallest number from both the lists are 1,9. And hence the pretty integer should be 19, right? then why the answer is 9? Plz correct me where I'm wrong.

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

    You should look at the case that 9 is present in both the arrays. So using just 9 and forming a single digit number would be accurate as it will become the smallest positive integer.

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

Problem D can be solved by asking queries (0, i) and (i, i) also.