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

Автор chokudai, 5 лет назад, По-английски

We will hold AtCoder Beginner Contest 164.

The point values will be 100-200-300-400-500-600.

We are looking forward to your participation!

Addition: About the Unrated ABC163

We are sorry for the inconvenience.

The server down during the last contest was caused by a sudden access to the ALB, and we found that we could solve this problem by doing Pre-Warming.

Also, the bug where the problem statement does not show up has been resolved by changing the caching algorithm. The problem with submissions showing up as IE (Internal Error) was due to the Judge server's scoring algorithm being different than in the past. This too has already been fixed.

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

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

Just out curiosity, rating 1999 in Atcoder is roughly how much in CF?

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

    2200-2300

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

      Damm 2200 is a beginner

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

      I think it's around 1800-1900 on cf

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

        I'm 1400~1500 on Atcoder.

        If 1999 on Atcoder means 1800~1900 on CF.

        Than I'm 1200~1300 on CF.

        Hello everyone I'm a beginner.

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

          Common, it might not be your saturation level (might not have attended enough contest)

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

          In AtCoder, when you participate in only a few contests your rating is much lower than your actual strength. You need to participate in at least 10 contests in order to get accurate rating.

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

          I just participated in a few contests and now have around 1550. Are you sure what you're telling is true?

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

            It will need a little more contest for your rating to be converged enough to your "actual" rating, because the rating shown is actually the lower bound of ninety-something-percent confidence interval of rating. Generally it needs about 14 times of participation to rated contests until the rating shown becomes high enough. (The "provisional" hint shown on the left of your rating also suggests this)

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

hope everything will be fine this time!

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

hope everyone will get full marks this round!

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

Hope it will never have problems(like 163) this time...

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

I hate Matrix Construction.

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

    I have given up.

    F is too hard to solve for me.

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

      Am I the only one who did a randomized solution for F?

      My method was like this:

      • First, decompose the matrix into 64 layers, with one layer for each bit, since bits on different layers don't affect each other.
      • Then, for each enforcement that's "AND = 1" or "OR = 0", set the corresponding row/column to 1 or 0.
      • If there are collisions (one cell set to both 1 and 0) then immediately return impossible,
      • Otherwise, for each of the cells that were neither assigned 0 nor assigned 1, randomly assign it 0 or 1.
      • Check if the resulting matrix fulfills requirements.
      • If not, randomly assign them again. If you have assigned them enough times (100000) and each time it failed, return impossible,

      Code

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

        Unfortunately your solution fails against the following test case. Your solution outputs -1, but a valid answer exists.

        Test Case

        Similar input with larger input leads to TLE too.

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

          Ah, I see — this is one of the test cases with exactly one solution? Thanks for hacking my wrong method!

          I initially expected that there would either be a lot of possible outputs or none at all. Turns out I was wrong :)

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

    I like problem F last time. But I have to give up this time.

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

How did you think of D?

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

E is much difficult

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

My first Atcoder contest...wow, this is beginner? I'm stuck on D. Feel like an idiot.

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

How to solve E?

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

How to solve D ?

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

The English Commentary for Problem D: Multiples of 2019 is here

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

How you solve D? I used brute force but it gave me TLE? Do you have any ideas?

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

    Just construct number from start contiguously and store frequency of remainder. If $$$n$$$ is length of string at stage $$$i$$$ number will be $$$\,\,\,N\,= \,d_0*10^{n-1}+d_1*10^{n-2}+...+d_{i-1}*10^{n-i-1}$$$

    let $$$R_i= N\mod2019$$$

    So at any stage if remainder is $$$R_i$$$ see how many time this remainder has occurred previously excluding current one and add this to final result. For this you ca just use an array or Map whatever.

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

      That is nice explanation, thanks!

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

      I can't understand the logic that if for an index i,if the remainder is equal to the remainder at any other index j,then how the number formed by the elements between i& j would be divisible by 2019? Can someone please explain.

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

      Can you please provide me the code of this approach, I'm getting WA.

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

        Sure.this.

        And to explain his doubt. let's say remainder $$$r$$$ is same for two indices $$$i\,and\,j\,(i<j)$$$ so number formed at index $$$i\,and\,j$$$ will be of the form $$$N_i=2019*k_1+r\,\, and\, N_j=2019*K_2+r$$$ so number between segment $$$[i,j]$$$ will be $$$(N_j-N_i)$$$ whose remainder got canceled out and we got $$$2019*(K_2-K_1)$$$ which is clearly divisible by 2019.

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

      Can you please explain why your code to this input 12019 gives this output 2, but 12019 mod 2019 != 0?

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

      My explanation + code

      Take for example divisor = 13 and S = 39262.

      1. Reminder of 2 / 13 is 2, save it.
      2. Reminder of 62 / 13 is 10, save it.
      3. Reminder of 262 / 13 is 2, but we have already seen this reminder. What does it mean?

      (262 - 2) % 13 = 260 % 13 = 0, so 260 is a multiple of 13. But we are interested only in 26. Turned out if x * (any power of 10) mod divisor = 0, then x % divisor = 0 if divisor isn't 2 or 5.

      1. For 39262 / 13 reminder is again 2 and we have seen it two times: (39262 - 262) % 13 == 0 and (39262 - 2) % 13 == 0, so add them both.
»
5 лет назад, # |
  Проголосовать: нравится +54 Проголосовать: не нравится

Am I mistaken in saying that today's ABC D has an identical solution to ABC 158E? The two problems seem to be asking for exactly the same thing.

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

Are standings hidden ?

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

What's the approach for D ? I used the stoi and substr function , got WA.

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

The problem F can be easily solved by maximum-flow with lower bounds. See this submission.

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

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

      Nice one :)

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

      can you please elaborate more i don't understand is this graph for the first sample? i understand that you solve for each bit independently but how do you add the edges?

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

    I thought of this but I didn't have enough time to implement it :( Should it pass considering there can be around $$$64N^2$$$ vertices/edges?

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

      There are only $$$\mathrm O(n)$$$ edges not weighted $$$1$$$. I think the Dinic algorithm still runs in $$$\mathrm O(m+\sqrt mn)=\mathrm O(n^2)$$$ time although I can't proof it.

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

My approach

This is my approach which got me TLE I pre-computed all the modulo values but to find (L, R) pairs I had to use a nested for loop. Can someone please tell me how do I find the number of (L,R) pairs in O(n) time ?

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

My D approach
k starts from 0
Iterate from right and calculate (10^k%2019+digit at i-th index)%2019
store this in map and for every element in map calculate NC2 of that frequency

This problem is like calculating number of subarrays having sum%m as 0

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

    can you please explain why this problem is like calculating number of subarrays having sum%m as 0 ??

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

      You are given a array you calculate prefix sum at every i-th index mod m
      Now if prefix sum at two index(suppose i & j) is same then there is a subarray from (i+1,j) whose sum will be zero. So we can store each sum in map and choose any two index having same sum in NC2 ways. In this question instead of prefix we calculate suffix sum + power of 10. And we can choose indexs in NC2 ways.

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

    You could use vector.swap(v) instead of memcpy, which basically copies nothing but a pointer.

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

      indeed, the runtime would have been even smaller, but at this point, it's still very fast.

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

Why $$$0 <= a_{i, j} < 2^{64}$$$ in problem F? For some weird unsigned long long practice? :)

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

I made me nervous that my codes were always CE. Actually,it's the "time" keyword that made this problem. Hope you all learn from my lesson.(How silly I was!) GL and HF.

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

Can someone explain easy to implement solution for E?

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

    $$$dp[i][silver]$$$ = shortest path from $$$1$$$ to $$$i$$$ such that you're left with $$$j$$$ silver coins.

    $$$silver$$$ is at most $$$2500$$$ — $$$(N * 50)$$$

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

      I am not able to understand how 2500*50 states can be minimized by n*m*2500 iterations (n is vertex). If we see bellman ford , n*n iteration is required to minimize all n vertexes.

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

HELP!!!

For problem E:

I used dp.

$$$dp[i][j][k]$$$ means now standing at the $$$i-th$$$ node ,and have $$$Min(600,j)$$$ silver coins the $$$minimal$$$ time to go to k.

We can use $$$dp[i][j][k]$$$ to update other situation as follow.

  • $$$dp[i][j][k]+d[i]$$$ to update $$$dp[i][max(j-c[i],0)][k] $$$
  • $$$dp[i][j][k]+(the—time—from—it—to—i)$$$ to update $$$dp[it][Min(600,j+(the—number—of—silver—coins—required—from—it—to—i))][k] $$$

And I used shortest path to update it,but I fail in the second test which is line(pass all of the others!),what's wrong?

https://atcoder.jp/contests/abc164/submissions/12395345

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

    I am sorry I can't help you with the issue but why 600 ?

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

    Is 600 sliver coins enough?

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

      No ,I fix it ,but I get TLE now...

      Can you tell me if $$$O(n^4logn)$$$ can pass?

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

        You can try the following :

        dp[i][j] denotes minimum time to go to the ith node with j silver coins from 1.

        Now repeatedly update this dp (n+1) times, as in bellman — ford. ( + 1 because initially I don't initialize it )

        UPD : There is a case where this gets Wrong Answer. Sorry. Theoretically it requires O(m*m) iterations.

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

          Can I see your code, thank you

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

            Here you go

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

              thanks bro

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

              why iter n+1 times? for bellman-ford, it repeats at most n-1, plus 1 init should be n.

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

                Thanks for pointing this. I tried to figure out what went wrong and I found that my solution is wrong as it requires O(n*n) iterations.

                It passed due to weak testcase.

                Testcases where I get WA : (An extension to 3rd sample case)

                4 7 25 1
                1 2 1 1 
                1 3 2 1
                2 4 5 1 
                3 5 11 1
                1 6 50 1
                1 10000000 
                1 3000000 
                1 700000 
                1 100000 
                1 1000 
                100 1 
                1 1
                
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  5 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится

                  thanks bro. so do you mean the iteration should be num of edges? i'm curious how you figure it out? i have tried the whole day but no clues found.

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

                  It is O(n*n) because,

                  1) To reach node 1 to node t, You will buy coins O(n) times.

                  2) Among above O(n) cities, it takes O(n) edges to move to node where we buy the coins next.

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

        Your submission can pass with given time complexity, but you are using much memory so it increases the time.

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

For problem F, without noticing $$$U,V<2^{64}$$$, I used long long instead of unsigned long long and got WA for 2 times.

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

Can I solve D recursively ?

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

Thanks for the quick English editorial !

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

my first contest at atcoder. the first three questions felt pretty easy.But got stuck on the D th problem if anyone can make a video tutorial on that.it would be a great help

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

Not terribly important, but I'm just going to point out that there's a typo on English B where Takahashi's name is misspelled as Takashi once.

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

If we do not consider time efficiency, is it possible to use the differential constraint system to solve the F problem? I used it but got wa

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

I wander why this submission on F failed in only one test

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

For question E, I have a test data that let my code that Accepted in Atcoder now to output wrong answers.

Data is: 3 2 1 1 2 1 2 1 3 2 4 1000000000 1 1000000000 1 1000000000 1

my code that Accepted in Atcoder now : https://atcoder.jp/contests/abc164/submissions/12437105

If row 111~115 is uncommented, you can use this data

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

Does E allow SPFA to pass

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

If anyone need explanation ,code and example for problem D here

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

I made video tutorial on first four problems . It may help you . Link

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

I accidentally found a "hack" for F; this solution is wrong but passes: submission

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

2 1 0

1 2 100 56

1000000000 1

1 52

this test case would hack some of the accepted solutions for problem E correct answer should be 57