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

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

Спасибо Rox и _overrated_ за помощь с идеями задач и их подготовкой!

1294A - Коллекционирование монет

Идея: MikeMirzayanov

Разбор
Решение

1294B - Сбор посылок

Идея: MikeMirzayanov

Разбор
Решение

1294C - Произведение трех чисел

Идея: MikeMirzayanov

Разбор
Решение

1294D - Максимизация MEX

Идея: vovuh

Разбор
Решение

1294E - Получи перестановку

Идея: vovuh

Разбор
Решение

1294F - Три пути в дереве

Идея: MikeMirzayanov

Разбор
Решение
Разбор задач Codeforces Round 615 (Div. 3)
  • Проголосовать: нравится
  • +80
  • Проголосовать: не нравится

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

An even simpler solution to A; first check that a+b+c+n is divisible by 3, then check that (a+b+c+n)/3 is no less than a, b, and c.

def main():
    def solve():

        a, b, c, n = map(int, input().split())
        if (a + b + c + n) % 3 != 0:
            print("NO")
        else:
            m = (a + b + c + n)//3
            if m < a or m < b or m < c:
                print("NO")
            else:
                print("YES")

    q = int(input())
    for _ in range(q):
        solve()


if __name__ == "__main__":
    main()
»
7 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

Here is a typo in explanation of problem E, answer for each column is "min(n — cnt[i] + i)"

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

В принципе, можно и DFS запускать в F от всех вершин, чтобы найти третью самую удаленную — дерево же. Кажется, что так лаконичнее, ведь функция DFS уже сверху написана :)

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

    Я также подумал, но потом понял, что при входных данных до 2e5 это просто не зайдет на плюсах

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

      Зайдет. Так как DFS запускать будем от вершин, которые принадлежат диаметру, при этом переходить будем только в те вершины, которые ему не принадлежат. В итоге найдем ответ и каждая вершина будет посещена ровно 1 раз.

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

Rohit_varma**Can someone tell me the validity of solution approach of problem C given in editorial ,I want to know the intuition behind how this approach is leading us to the correct solution?**

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

    Instead of three distinct number you can consider two number a and d(b.c) where a is the least factor of n and d(b.c) is another or greatest factor of n. Then try breaking d into b and c such that a, b and c are not equal. For example 24. Smallest factor is a=2 and another factor is d=12. Further break d into it's own factor b=3 and c=4 such that they are not equal.

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

    Although my approach is a bit slower than editorial's, it is very intuitive. Find all distinct factors of N other than 1 and N. This can be done in O(sqrt(N)). Sort these factors. Run two nested loops over the factors. Outer loop picks the value for A. Now we have to find two distinct factors of N / A. Since the factors are sorted, we can use a two pointer approach and find it in one iteration of the inner loop. The idea is something like this: Let L = 0, R = size of factors array — 1. Repeat while L < R: If factors[L] * factors[R] < N / A, increment L. If factors[L] * factors[R] > N / A, decrement R. If factors[L] * factors[R] == N / A, we have found our answer. Make sure to not use the same factor that was picked by the outer loop.

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

Anyone give me the intuition that how to solve E.

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

    I also want to know how to solve E.

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

    I think this problem is the most difficult one of all the six problems.

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

    First you have to see that for each column minimum operation have to be calculated now for each column you have to see how much circular rotation is needed for each element in the column now u have the count of each type of cyclic rotation some elements need 1 rotations some 2 etc.. now using this data we can say that n — (count of ith rotation) + i is needed to set the column calculate minimum of this now add minimums of all column

    Sry i am bad in explanation

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

    Lets just take a look at only one column. We can rotate the column or modify one elememnt per move.

    We should admit that these moves are REVERSIBLE, so it's the same problem as: "We need to rotate the disordered column and THEN modify its element to get the standard column". So we create an array Moves[N] (means if we firstly rotate the column i times, and the total moves we need to get the standard column is Moves[i] , Moves[i] is initally assigned n + i since we suppose that every elements need to be modified), but some elements (for example: element "x") don't need modify IF (x is in the standard column). Thus we need to do Moves[the right the rotating times]--; And the answer for this column is min{Moves[i] (0 <= i < n) } The final result is the sum of each column's answer.

    Hope i could help you. qwq.

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

    For E you can divide it into subproblems 1. Solve Each column as an independent entity 2. How to solve? 3. Notice columns are in form of m*i+(j+1), here 0<=i<=n-1, jth column number , remove (j+1) all column are in same form. 4. Each column- Now make a dictionary to count number of elements in that rotation(how far that element is from it's actual position) (you can see in this solution 69363795 ) and first check element is valid or not. now run through the dictionary (d[x]=y) ans = min(x+(n-d[x]), ans) (ans = n initially)

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

    Maybe I am too late to answer, the obvious observation is all columns are independent. Now, to solve each column, you need to find a rotation, which sets most of the numbers at their position and rest will be fixed by modifying. How do we get our best move ? We may have best number for rotations from 0 to n-1, where n is the number of elements in that column. We run a loop from 0 to n-1, and calculate the element required at ith position, in column. Now we need to know, where is this element in original column, and hence the required number of rotation. We store these required number of rotations by each element. Now, if there is a rotation value 2, which appears 3 times, that means, by rotating 2 times, we will get three elements at their position. So if a rotation x appears y times, that means x moves will fix y elements at their position, and we will need n-y moves to fix rest of elements. We need the minimum value for this. That query for original positions of values can be done by storing original values and their positions in a multimap.

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

Wow, test cases on F is very tight.

Anyway, I'm very impressed by Mike's sol. It's neater than DP

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

In problem D I dont understand this

"Firstly, let's understand what the operation does. It changes the element but holds the remainder modulo x. So we can consider all elements modulo x."

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

    In case 1: x = 3 then: if ($$$cnt_0 == k$$$) ($$$cnt_0$$$ declared above) you can take the elements in this $$$set = {0,3,6,9,12,...}$$$ by increasing x or decreasing x. if ($$$cnt_1 == k$$$) you can take the elements in this $$$set = {1,4,7,10,13,...}$$$ by increasing x or decreasing x. if ($$$cnt_2 == k$$$) you can take the elements in this $$$set = {2,5,8,11,14,...}$$$ by increasing x or decreasing x. Suppose $$$y = min(cnt_0 = 5,cnt_1 = 3,cnt_2 = 4)$$$ Obveriously $$$cnt_1 = 3$$$ is the least. then $$$set_0 = {0,3,6,9,12}$$$ $$$set_1 = {1,4,7}$$$ $$$set_2 = {2,5,8,11}$$$ $$$mex(set_0 \cup set_1 \cup set_2) = ((x = 3) \times (cnt_1 = 3) + 1) = 10$$$ So the answer is 10. So at the begining you can consider all elements modulo x.Because this operation has no effect on the final answer Sorry for my bad English

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

Can anyone please explain D in a better manner?

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

    In one move you can choose any element $$$a_i$$$ and change it to $$$a_i:=a_i+x$$$ or $$$a_i:=a_i−x$$$ any number of times only with the condition that $$$a_i$$$ never becomes negative. If you have an element of the form $$$kx + c$$$ in which $$$0 \leq c \lt x$$$, it could change to $$$c, x + c, 2x + c ... (k-1)x + c, kx + c, (k+1)x + c$$$ and so on. For example, if you have $$$0$$$ as an element, then, it can stay at $$$0$$$ or change to $$$x, 2x, 3x$$$ and so on. As a consequence, in this particular case, all the numbers $$$a_i \equiv 0 (mod x)$$$ can take the place of any of them. In general, if $$$a_i \equiv b (mod x)$$$, you can change that $$$a_i$$$ to any number that has the same remainder $$$b$$$ after dividing it by $$$x$$$. So your $$$mex$$$ start with the number $$$0$$$ because the first number you need. Then, on each query you are going to add on an array one more element with the remainder that the number of that query has. Let's suppose you are still in $$$0$$$ and you read a number whose remainder is $$$0$$$, you decrement the frequency in your array with index $$$0$$$ by one and while your $$$mex$$$ can increase, you repeat that before going to the next query because you can have many numbers with remainder $$$1$$$, $$$2$$$, even until $$$x-1$$$ that can increase the $$$mex$$$. The time complexity is $$$O(n)$$$ because there will be at most $$$n$$$ times in which you could substract one to the frequency of a remainder in the array.

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

Can anyone explain Problem D. I can't get it

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

For Problem F:

How to prove that 2 endpoints of a diameter will result an optimal answer ?

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

I have a somewhat different approach to F. We store the maximum , second maximum and 3d maximum for all subtrees. This can be easily done using dfs. Then we loop for all nodes. Answer is either m1 + m2 + m3 or m1 + m2 + max(some m2 in the subtree of the node). All this info can be maintained in a single dfs. https://codeforces.me/contest/1294/submission/69415213 If anyone is further interested in the approach, I would be happy to elucidate it further.

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

Who knows where to read about multi-source bfs?

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

What is the DP approach for F?

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

Probably overkill for C, but a randomized solution over divisors works and is really easy to code. The sieve in my solution is unnecessary (but can help if n was bounded above by say, 1e7).

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

why is there a stress on finding the third vertex c in F when we already know the edges in a diameter will already contain the maximum number of edges as asked??

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

In problem F Why always take diameter?

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

Seen lot of solutions up here for "A" . Well I think I did the better implementation (no sort needed just the max).

#include <bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll n,a,b,c;
        cin>>a>>b>>c>>n;
        ll m=max(max(a,b),c);
        ll dif=m-a + m-b + m-c;   // one of them will results in zero ,you know that
        n-=dif;
        if(n>=0 && n%3==0)
            cout<<"YES\n";
        else
            cout<<"NO\n";
    }
  return 0;
 }

And "E" was a good greedy question I must say :)

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

I have used the same approach as the editorial. Why am i getting WA on E. link to my solution. Thank you for your efforts

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

In problem E Can anyone tell me why this is true, I'm not able to understand?

" if ai,j%m≠j (% is modulo operation) then there is no such cyclic shift."

Thank you!

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

    Means that particualr aij value does not fit in the jth that column, aij value must be change in that case

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

    It is because all numbers in the j-th column must have j as a reminder when divided by m. It's clear to see why this is true looking at the image in the problem. So, numbers that don't have this property don't belong to the j-th column, therefore there's no cyclic shift that will put them in place because they don't belong to that column.

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

69433414 for part A ,my code was running fine on IDE but didn't work on codeforces . Can someone suggest me some correction?

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

Это, конечно, хорошо, что авторы дают участникам самостоятельно доказывать решения задач (я про задачу F), но было бы не плохо, если и в разборах были бы описаны доказательства.

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

[DELETED]

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

what is the "obvious dynamic programming solution" for problem F?

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

    Oh, I got it. You just have to root the tree and for each node check if this node is the node with degree = 3 in the answer. (in case that the tree has no node with degree >= 3 we can just print two nodes with degree 1 and another arbitrary node).
    For each node u with degree >= 3 we will maximize between the two following cases :
    1- sum of the maximum length of a path to a leaf passing through 3 different children of u starting from u (if has at least 3 children)
    2- sum of the maximum length of a path to a leaf passing through 2 different children of u starting from u and the maximum length of a path going to a leaf from parent of u starting from u (if u has parent)
    Of course we need to maintain the leaves that give us optimal answer.

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

How to approach E if you could shift the columns downwards also ?

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

Promble F:

Help! Can anyone prove why we should get the diameter first? Why we will get the best answer in this way?

I can't prove it.

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

    We can try an exchange argument.

    Suppose we have chosen 2 nodes $$$u, v$$$. If $$$u, v$$$ lie on the diameter, then we can extend $$$u, v$$$ to the diameter ends and get a larger answer.

    If $$$u, v$$$ do not lie on the diameter, then we can get a bigger answer by choosing the diameter. (Since the definition of the diameter is the two nodes who are furthest apart.)

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

I very nice contest. The problems were very Mathematical and interesting.

Here are my solutions

  • $$$A$$$ — Simple observation
  • $$$B$$$ — Greedy $$$+$$$ Sorting
  • $$$C$$$ — Prime Factorisation $$$+$$$ Observation $$$+$$$ Case Analysis
  • $$$D$$$ — Invariant $$$+$$$ Greedy
  • $$$E$$$ — Treat each column independently. For a column, find the cost of each of the $$$n$$$ possible rotations and choose the best rotation.
  • $$$F$$$ — Find the diameter of the tree using $$$2$$$ DFS. Then, do multi-source BFS from every vertex on the diameter and find out the furthest vertex from the diameter.
»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Thanks for the useful editorial and new codeforces problems

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

Solution for 1294D - MEX maximizing in O(n) 69491985

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

    Could you explain your approach or intuition behind your solution too?

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

      Let $$$MEX$$$ the current MEX. If $$$y_{i} = MEX$$$ then the $$$MEX$$$ increases by one, if it is smaller or larger, then can we use it to improve our $$$MEX$$$ soon, how do we do this?
      Let $$$D$$$ be an unused $$$y_{i}$$$, if $$$MEX \equiv D \pmod{x}$$$ then we can use $$$D$$$ to improve $$$MEX$$$. The numbers we use are not going to be changed in a future query because if we do this our $$$MEX$$$ would go down since the smaller number not used would be less than the $$$MEX$$$

      So in each query we try to improve the $$$MEX$$$ as much as possible. For this we have an $$$ST$$$ array of size $$$x - 1$$$, so that $$$ST_{i}$$$ is the number of times we have the unused element $$$i$$$.

      Sorry for my English (Google Translator). XDXDXD

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

My approach in c :

First let's analyze the problem. We have to find out if n can be expressed as a multiple of 3 distinct values. Suppose we have a number with prime factorization of n = 2^2 * 3^3 * 5^1. Now if you distribute the prime factors into three numbers (for example a = 2 * 3^2, b = 3, c = 2*5, Here no new power of any factor has been created but we have just distributed the existing powers), without knowing anything else we can say a*b*c = n. So this problem can be translated to, "can we distribute the prime factors of n into a,b,c such that a!=b!=c."

Solution plan: Suppose given number is n = 2^2 * 3^3 * 5. We will select a = 2 (shortest prime factor), b = 3 (second shortest prime factor) and c = n / (a*b). (all the rest prime factors). (Thus we don't actually need the powers of all prime factors rather all the distinct prime factors).

Algorithm:

1. Find out NUM = distinct prime factors of n. Store them in a vector V.

2. if(NUM == 0) n is prime, ans is no.

3. if(NUM == 1) a = V[0], b = V[0]*V[0], c = n / (a*b). if(a*b*c == n && a!=b && b!=c && c!=a && c > 1) ans is yes. print a,b,c.

4. if(NUM == 2) a = V[0], b = V[1], c = n / (a*b). again check the same condition as 3.

5. if(NUM >= 3) a = V[0], b = V[1], c = n / (a*b). print a,b,c.

When NUM >= 3 there always exists an answer because there are already at least 3 distinct prime factor.

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

    great solution !!!!, I saw this problem in another way : you can check my solution here : 200922897

    my approach: Without loss of generality let's a < b < c; let's see how much a (the min of three) can grow! , it's obvious that the maximum of a will be less than ∛n; now let's see b , b will be a < b < X; let's see what is X; we already fixed a , so with b and c , we need to make n/a

    so b must be < √(n/a) and c in the other part ! complexity is less than 1e8 -> it passes

    but your solution is much better!

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

In problem F, we can use dfs instead of multi-source bfs.

Let $$$u$$$ and $$$v$$$ be the endpoints of a diameter. Then, it's always optimal to take vertex $$$w$$$ which $$$dist(u, w)+dist(v, w)$$$ is maximal as the third vertex ($$$dist(x, y)$$$ is distance between $$$x$$$ and $$$y$$$).
Let $$$r$$$ be the intersection of $$$w$$$ and the diameter. Then, the answer can be expressed as follows: $$$dist(u, v)+dist(r, w)=dist(u, v)+\frac{dist(u, w)+dist(v, w)-dist(u, v)}{2}=\frac{dist(u, v)+dist(u, w)+dist(v, w)}{2}$$$
Since $$$dist(u, v)$$$ is the diameter, we should maximize $$$dist(u, w)+dist(v, w)$$$.

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

Anyone can offer a DP solution for problem F? Thanks!

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

Let's take a moment to appreciate the elegance of the rounds prepared by vovuh.

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

in Question 1 why condition 2c-b-a exist? I mean why 2 multiplied by c and the 3 elements need to be sorted?

  • »
    »
    7 лет назад, скрыть # ^ |
    Rev. 5  
    Проголосовать: нравится +3 Проголосовать: не нравится
    I'll tell you a simple solution, which might give you an intuition
    $$$a + A = k$$$ (some value)
    $$$b + B = k$$$
    $$$c + C = k$$$
    add all these three equations
    $$$a+b+c+(A+B+C)= 3*k$$$
    $$$a+b+c+n= 3*k$$$
    $$$\frac{(a+b+c+n)}{3}= k$$$
    So check if $$$(a+b+c+n)$$$ is divisible by $$$3$$$
    now $$$k= \frac{(a+b+c+n)}{3}$$$ and since
    $$$a + A = k$$$ this implies $$$k-a=A$$$
    $$$b + B = k$$$ this implies $$$k-b=B$$$
    $$$c + C = k$$$ this implies $$$k-c=C$$$
    Since the above 3 should be +ve, check if $$$k \gt max(a,b,c)$$$
    So effectively check 2 things
    1. if $$$(a+b+c+n)$$$ is divisible by $$$3$$$
    3. if $$$\frac{(a+b+c+n)}{3} \gt max(a,b,c)$$$
»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

69553041 (Problem -E) Can someone please tell me whats wrong in this solution... I am getting wrong ans on test case 62

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

Submission : https://codeforces.me/contest/1294/submission/69645922

My Approach: I am just trying the brute force approach by taking maximum distance separated nodes from any one of the leaf nodes.

Then, I am finding all the vertices between both the maximum separated vertices. After that, I am finding the node which is farthest from any of the middle vertexes that are not in the path of our pre-chosen 2 vertices.

Can anyone help me figure out why I am going wrong?

Thank you :)

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

How to do F with DP?

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

what is the dp approach for problem F?

thanks in advance.

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

In the Question E,it should be clearly mentioned that those operations are separate.It created a confusion because it was written "one move" as : In one move, you can: __ choose any element of the matrix and change its value to any integer between 1 and n⋅m, inclusive; take any column and shift it one cell up cyclically (see the example of such cyclic shift below). It seemed as if we Change any element of matrix then its necessary to do cyclic shift.

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

even a simpler soln for F is just run 4 dfs

2 dfs to find diameter

3rd dfs to mark all the vertices in the path b/e end points of diameter

4th dfs to calculate the minimum distance of each node from diameter.

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

https://codeforces.me/contest/1294/submission/374533456

For problem c we can solve in one go

let x = no of divisors less <=sqrt(n) ands not equal to 1 store them also note that first element of this is a prime ifx<=1 we cant since number is of from p^2 or p (p is prime )

if x=2 we cant since x is of form p^5 or q*p^2 (p,q are prime)

if x>=3 consider first three elements

case 1: p p^2 y else p, y/gcd(y,p), n*gcd(y,p)/(p*y)

case2: p q y construct p,q, n/(p*q) q is prime

we can easily distinguish between both cases