awoo's blog

By awoo, history, 4 years ago, translation, In English

1476A - K-divisible Sum

Idea: vovuh

Tutorial
Solution (adedalic)

1476B - Inflation

Idea: adedalic

Tutorial
Solution (adedalic)

1476C - Longest Simple Cycle

Idea: adedalic

Tutorial
Solution (adedalic)

1476D - Journey

Idea: BledDest

Tutorial
Solution 1 (BledDest)
Solution 2 (BledDest)

1476E - Pattern Matching

Idea: BledDest

Tutorial
Solution 1 (awoo)
Solution 2 (awoo)

1476F - Lanterns

Idea: BledDest

Tutorial
Solution (BledDest)

1476G - Minimum Difference

Idea: Neon

Tutorial
Solution (Neon)
  • Vote: I like it
  • +143
  • Vote: I do not like it

| Write comment?
»
4 years ago, # |
  Vote: I like it +42 Vote: I do not like it

Problem E was beautiful! Thanks :D

»
4 years ago, # |
  Vote: I like it -9 Vote: I do not like it

Finally a contest with less ad-hoc!

»
4 years ago, # |
  Vote: I like it +89 Vote: I do not like it

contest is good but statement of E was awful

»
4 years ago, # |
  Vote: I like it +3 Vote: I do not like it

In problem C , How the value of the following test case will be 6? please explain..

input
3
2 4 2 
-1 2 4 
-1 2 1 
output
6
  • »
    »
    4 years ago, # ^ |
      Vote: I like it +44 Vote: I do not like it

    Excuse the use of Paint lol, but it looks something like this (the blue edges are the ones forming the cycle):

»
4 years ago, # |
  Vote: I like it +6 Vote: I do not like it

I think Problem D is simpler to use the Disjoint-set. Am I right?

  • »
    »
    4 years ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    It can be done simply by moving from current city to Right to find the largest pattern of RL...RL or RL...RLR and similarly on left from current city to left as LR...LR or LR...LRL and length of both the patterns + 1 will be the max cities visited from current city

    You can see my solution : https://codeforces.net/contest/1476/submission/106090614

»
4 years ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

This was a very nice contest after a while. Kudos to the authors, each and every problem in the contest that I solved / up-solved taught me something new. Hope for more such rounds :)

»
4 years ago, # |
Rev. 2   Vote: I like it +8 Vote: I do not like it

Can someone help me figure out the error of code for submission below? My Code Here is my code for problem F. It gets wrong answer on test 5, case 1259. However, I can't get that sample.

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Can Anyone tell me how to solve question D recursively and doing memoization?

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

For B, can anyone explain why there's a k-1 added to 100ll * p[i] - k * pSum?

  • »
    »
    4 years ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    It is basically done to take ceil of the value.

    Let me make it more clear — Ceil(a/b) == (a+(b-1))/b

    You can check this by taking two cases -

    1. a = k*b. Both functions return k

    2. a = k*b + x (0<x<b). Both functions return k+1;

    • »
      »
      »
      4 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      but in editorial he didn't mention the ceil thing i understand it from the code but i dont understand the purpose of it, if u can explain please

      • »
        »
        »
        »
        4 years ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        It is mentioned in the editorial that -

        $$$x \ge \left\lceil \frac{100 \cdot p_j - k \cdot (p_0 + \dots + p_{j - 1})}{k} \right\rceil$$$

        Notice the bracket, that is for denoting ceil function.

        Now the next question is why do we even need that — because x is a non negative integer and right hand side acc. to maths will return a floating value (which may not be integer).

        Let's take an example — You know x is an integer and after solving RHS you get -

        $$$x \geq 1.2 $$$

        So definitely you know you should pick next integer (ceil value) as answer i.e. x = 2.

»
4 years ago, # |
  Vote: I like it +1 Vote: I do not like it

A constant optimization for 1476G - Minimum Difference -- observing that the upper bound of value $$$c$$$ always equals to the lower bound of $$$(c + 1)$$$, we can store only the lower bounds (but not both as in the model solution),

You can see my submission 106048247 for the detail.

  • »
    »
    4 years ago, # ^ |
      Vote: I like it +13 Vote: I do not like it

    There is no need of segment trees for 1476F - Lanterns. We need only two operations:

    • The one is to query $$$\max\{(j + p_j), \dots, (i + p_i)\}$$$ for increasing $$$i$$$.
    • The other one is to find the minimum $$$j$$$ where $$$\mathrm{dp}[j] \geq i - p_i - 1$$$.

    The two operations can be supported by two standard (monotonic) stack and std::lower_bound.

    My submission 106219219.

    • »
      »
      »
      4 years ago, # ^ |
        Vote: I like it -39 Vote: I do not like it

      forget about this stupid problem is your profile photo-real ??

    • »
      »
      »
      3 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Hello, can you take a look at my submission for problem F Lanterns.

      I have not used a segment tree but a sparse table and for each lantern(let us say i) that points to the left, I have kept a pointer to the last lantern(let us say j) such that the lanterns 1 to j cover some continuous segment of lanterns not covered by the lantern i.

      I am failing at some 1200+ subtest of test case 5 and will be much thankful if you can help me point out where my algorithm fails. Or if you can provide some test case where it fails?

      Any help will be much appreciated. Thanks!

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

For E, why can't I topsort it?

»
4 years ago, # |
  Vote: I like it +3 Vote: I do not like it

In E you can also find a match converting the string to integer. The number of possible strings is $$$27^k$$$, so every pattern can be indexed.

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Question for problem E

Input

  • 4 4 4
  • aaaa
  • aaaa
  • aaaa
  • aaaa
  • aaaa 2
  • aaaa 2
  • aaaa 2
  • aaaa 2

The solution's output is "NO", but I think 2 1 3 4 is right, do I understand the problem wrong?

  • »
    »
    4 years ago, # ^ |
    Rev. 2   Vote: I like it +3 Vote: I do not like it

    Your input is not correct. All patterns should be pairwise distinct.

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

in solution of problem b x = max(x, (100ll * p[i] — k * pSum + k — 1) / k); why we need to add k and minus 1 here k * pSum + k — 1

  • »
    »
    10 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    it is the process of getting ceil value. if you want ceil(5/2) than it will be (5 + 2 — 1)/2; hope you will understand.

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

In the first problem, I did the same thing with ceil function but it threw wrong answer...How is it possible to get the correct answer by just using ceil in a different mathematical way as shown in tutorial??

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Problem B : Inflation.

int n =sc.nextInt(); double k =sc.nextDouble();

double a[] = new double[n];

        for(int i=0;i<n;i++)
            a[i]=sc.nextDouble();

        double denominator = 0, dummy=0;

        for(int i=1;i<n;i++)
        {
            double numerator = a[i];
            denominator = denominator+a[i-1];
            dummy = dummy+a[i-1];
            if((numerator/denominator)*100<=k);
            else
            {
                double required = (numerator/k)*100 - denominator;

                denominator =  denominator + Math.ceil(required);
            }

        }

        System.out.println((long)denominator-(long)dummy);

This fails on test 4. Can someone tell me why ?

»
3 years ago, # |
  Vote: I like it 0 Vote: I do not like it

My code to F Lanterns fail at some 1200+ test of test case 5. Can someone take a look at my submission and guide me to where my code's failing? Or provide a test case where it fails?

Help will be much appreciated. Thanks!

»
15 months ago, # |
  Vote: I like it 0 Vote: I do not like it

For problem F, there also exists another dp.

For any $$$i$$$, we will assume that we use only the first $$$i$$$ lanters, and define $$$dp(i, j)$$$ to be the maximum possible value of $$$(i + p[i])$$$ among all right-facing lanterns in the first $$$i$$$ lanterns, if the $$$j$$$'th ($$$j < i$$$) lantern is the leftmost uncovered lantern.

Transitions are somewhat similar to the editorial, but we require only one segment tree instead of two.

Implementation: link