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

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

We will hold AtCoder Beginner Contest 171.

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

We are looking forward to your participation!

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

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

Starts in 5min

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

I was just trying to cheer up.

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

I know this time E was actually easy, but the first time I solve E, I am unable to solve C, I'm so sad.

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

has someone solved d. can it be solved without segment tree

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

    Why to use chainsaw when work can be done with butter knife!

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

    Yes it can be solved without segment tree My approach

    1) Keep track of current sum of total elements

    2) Keep track of numbers of all the integers in array (i.e in array {1,2,1,3,1,,2,3,4} a[1] = 3, a[2] = 2, a[3] = 2, a[4] = 1. And current sum = 14.

    3) Than for each query update update the sum as

    sum = sum + (number of element in a[first number]) * (second number — first number)

    4) than change the array a at appropriate indices

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

    Segment tree is way overkill. It is actually quite simple. ARR[100005] stores the number of occurrences of each number in V[N] (V is the inital array given in the input). SUM stores the current sum of all elements. Then you encounter a query for example (1, 2). You know you should change all 1's into 2's. So just do S -= ARR[1] (coz 1's no longer exist). then S += ARR[1]*2 (coz all 1's are now 2's). And then ARR[2] += ARR[1] and ARR[1] = 0.

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

    Use Map

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

after contest ended,, can anyone provide the solution of C and E please.. I first-time attended and solved a,b,d. trying c and e for almost 50 minutes..

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

      its showing my submission..i think now i canot see your solution..your solution with c++ ? then provide here please

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

    E was Easy

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

    C:

    Hint

    E:

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

    For E:
    Observe that you can get value of ith scarf if you xor all a[j] (where, 0<=j<n and j!=i). But if you calculate all values like this, then complexity will be O(n*n), so what you can do to optimise is calculate any ith scarf value using method described above(say value of 1st scarf) and xor it with a[i] (here a[0]) , it will give us xor of all scarf values(say x). Then you can use this value(x) and xor it with each a[i] (for 0<=i<n) to get ith scarf value. My solution : Solution
    C is just calculating column name in a spreadsheat for given row(N) ,refer this : GeekForGeeks

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

what is the logic for problem D

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

    Basically, keep a map which has the count of all numbers occurring in the array, and after each query, update the map. My submission-https://atcoder.jp/contests/abc171/submissions/14549573

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

Please don't ask contest related questions while it is ongoing

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

Quite good maths in $$$F$$$

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

how to update an element in map

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

trying problem F for more than 40 mins.. can't get anything.. even cant get the testcases ... anyone after the contest please help me for problem F with detailed explanation and how to arrive to such solution

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

C is a popular interview problem with different name. https://www.geeksforgeeks.org/find-excel-column-name-given-number/

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

E and C should have been swapped ):

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

Is F 26 ^ (k + s.size()) - number of strings of length k + s.size() that doesnt contain s as subsequence? How to get second value? I guess dp of O(n * 26) or O(n)? Halp me plzzz :(

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

Super quick editorial in Python. More editorials at http://interview.solutions

A.

A tutorial
A code

B.

B tutorial
B code

C.

C tutorial
C code

D.

D tutorial
D code

E.

E tutorial
E code

F.

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

    Why are we doing n-=1 every time in the question c?

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

    How did you come with that solution for F.

    I thought something like:- 26^k * (n+k)Ck ,then subtract all cases.

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

      why 26^k * (n+k)Ck not the answer? I was also thinking the same.

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

        Because their will be cases when some cases have common elements

        ex -> k = 1, s= 'ab'

        a*b, *ab

        aab, aab , It will occur in both but we have to count it once.

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

    in prob. C, can you explain why n -= 1 ?

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

      We can just notice pattern like A = 1, B = 2, ... Z = 26, AA = 27, etc. We know already the value mod 26 will tell us the last character, so we try to map [1..26] to [0..25]

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

        i tried to do something like this in every iteration "zabcdefghijklmnopqrstuvwxy"[n%26] and then divide n by 26, lastly reversed what i got.

        can't figure out why this approach is wrong. it doesn't work for inputs like 26+26^2

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

          it doesn't work because 26 should correspond to 'z' but as 26 %26 = 0 and your code will give the answer to be 'aa'. Hence we have to subtract 1 for each iteration .

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

    alexwice could you elaborate how did you come up with such simple approach for F? My approach was to build strings which have the given string S as a subsequence, So we would need to choose |S| positions from K+|S| places, and fill the rest with any 26 letters, but the problem is overcounting. How does your solution handle this?

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

    For F, why is this Wrong:

    Number of strings such that S is a subsequence of string of length |S|+K : C(|S|+K,K)

    Number of strings of length K : 26^K

    So answer = C(|S|+K,K) * 26^K

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

      hetp111 Because this answer overcounts. for example if the string S is "oop" and K = 1, Then ooop will be counted 3 times by your formula, but we should count it only once.

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

    Can you explain why only the length of S matters?why different string of the same length won't affect the answer?

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

    your F code is giving WA.

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

    Why the answer is the same if S was all 'a's ?

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

      Because in F each insertion can be broken into 3 cases [var1var2'x'],[var1'x'var2], ['x'var1var2 ]. (Here we are inserting the variable x) .Try finding the answer for k=1 and take var1 and var2 same in one case and different in the other , you will reach at the same answer. If you still have any problem you can refer to my youtube editorial here

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

Fs statement would have been more clear if distinct strings had to be counted.

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

    What else of a meaning can that be? It must be distinct strings even without the word distinct.

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

How to solve F please help

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

Can anyone help me with the problem F? I can feel there is a lot of maths involved (possibly). Is there any simple way?

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

    It involves fundamental combinatorics only — of placing x same objects in N different places and filling the rest with any object other than x . If you still are having problem understanding the editorial refer to this Video Editorial — F.

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

Today's problem C is a subset of problem 1B

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

I've posted an English editorial here: https://codeforces.net/blog/entry/79153

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

It was my first atcoder contest only able to solve problems a,b,d. Looking forward to solve more in upcoming contests.

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

that was my first atcoder contest and I couldnt solve C. Are there editorials after contests?

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

Nice contest.

How to do F?

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

How to solve F ?

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

can someone tell logic behind on how to solve C?

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

I firmly believe that I'd seen the E in some last year's Codechef cook-off.

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

    It was in January or february cookoff this year. I couldn't solve it then but watched a video tutorial of it after the contest. I solved it today in one go without even reading the problem completely :)

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

IMO, this contest was much easier than other ABCs. How to solve F?

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

What is the problem in solving D using a dictionary? I got 8 AC and 4 WA Code: https://ideone.com/BWSxtc

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

What is the solution for F? I tried to solve it with combinatorial but I failed. Any theorems?

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

F can be solved using this link.

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

My approach for F was to calculate the number of ways to put K indistinguishable objects in |S| + 1 containers (the objects being the new characters and the containers the spaces between letters, here with |S| I denote the length of the string) and then choosing one letter for each new character. Resulting in $$$\binom{K + |S|}{|S|}\times{26^{K}}$$$. However, it didn't turn out to be right... can someone help me?

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

    Yes I tried that in the same way but it's wrong. I think it's because your counting some things more than once.

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

    You end up overcounting, because you can reach the same final string $$$T$$$ in many ways (for example, if you start with $$$S$$$ = abc, you can reach $$$T$$$ = abbc by inserting a b either before or after the middle b).

    I have a detailed explanation in this post.

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

how to solve F?

Any sorts of hints are appreciated.

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

Can someone please explain on which test case my submission failed for the problem D. I used the same approach as in editorial. https://atcoder.jp/contests/abc171/submissions/14558518

»
5 лет назад, # |
Rev. 4   Проголосовать: нравится +64 Проголосовать: не нравится
F's solution
»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I thought of F like this: Let the length of the string given=N So, the final length of the string (to be formed) must be N+K Now, consider all the strings that can be formed of length N+K. This will be 26^(N+K) Now, we know that the original string must be a subsequence of the final string. So, the problem reduces to finding the number of ways of having the given string as a subsequence of the final string. So, we need to fix N positions from N+K with the letters of the given string. So, the ans = 26^(N+K-N) * 1*(C(N+K,N)) = 26^(K) * C(N+K,N) However, I was not getting the correct answer to this approach. Any ideas as to why this might be wrong.

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

Can anybody explain a shorted method for question E? I could solve it but my method is a bit overkill?

  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    1. Take xorsum of each integers like s^=a[i];
    2. Again for each integer do xor with s and current element and print it.
  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Calculate xor of every element of the array, except at the current index and print

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

hai everyone.. why my code give wa on D..

this is my code

pls help me.. thank you

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

.

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

Can anyone Explain Problem C

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

    C is basically similar to converting a number into binary , except here the base is given to us to be 26 , one thing that is different is that you have to subtract one from n in each iteration . If you still can't understand check out this Video Editorial

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

I think, Atcoder should not give WA, if my code does not give right output in Test 1, just like codeforces. I received a penalty in A, just because I took test cases as input

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

    I agree, it's nice to have a simple check for I/O format.

    I've also submitted solutions to the wrong problem before, so it would be nice to avoid that penalty as well.

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

I think F is a very nice problem. The technique which is used for not to overcount any string is a genius idea.

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

Can someone please tell me where am I wrong in C. It is showing WA for some test cases.

#include <bits/stdc++.h>
using namespace std;

void solve()
{
    unsigned long long int n;
    cin >> n;
    string ans = "";
    while (n)
    {
        string a(1, (n % 26) + 'a' - 1);
        ans.insert(0, a);
        n /= 26;
    }
    cout << ans;
}

int main()
{
    int t = 1;
    //cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

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

In cpp.If anyone need .

A
B
C
D
E
F
»
5 лет назад, # |
Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

Video solution for problem F.

Link: https://youtu.be/3mnwcJGO_MI

UPD: sorry for uploading this video that late, it's because of slow internet connection.

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

Can anybody give a comparison of difficulty between CF and AtCoder? Like what is the difficulty of AtCoder Beginner A,B,C,D,E in terms of the difficulty on CF?

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

    use that site: https://kenkoooo.com/atcoder#/table/slimnet

    instead of "slimnet" put your atcoder nickname.

    here, in "table" tab you should put a tick on "show difficulties", and you will see the tasks colors and their difficulties if u put your mouse cursor on the colored circles. if you want to compare it to cf you can add 300-500 to its atcoder rating and it will be pretty accurate cf rating of that task

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

chokudai I want to point out a bug in the AtCoder's Virtual Contest system. I registered for this contest but didn't participate. So, I decided to do a virtual for this contest after it ended. But on viewing virtual standings, it shows only my contest participation by default, in which I didn't try any problem.

This is a screenshot of virtual standings during my VC participation:

Maybe this can be updated to show the virtual rank instead of the contest ones, in case someone is writing a VC for the contest

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

for c

why is this solution is wrong. please clarify someone.

https://atcoder.jp/contests/abc171/submissions/14552303

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

Can anybody explains why in problem F, we have to multiply by 25K−(the number of letters before SN).

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

vedio editorial for all problems : https://youtu.be/eTKfAdpP1Cc

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

Can anyone explain problem E: Red Scarf?

I can't understand Japanese editorial...

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

Can anyone explain Problem F?

I can't understand the editorial's explanation...

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

Similar (But harder) idea for problem F:

Let $$$f(i, j)$$$ denote the number of strings T of length i in which the longest prefix of given string S which appears in our T as a subsequence is equal to j.

Then it's quite straightforward to reach the following recurrence:

$$$f(i, j) = f(i - 1, j - 1) + 25 * f(i - 1, j)$$$

(There is just one character available to increment the value of mentioned prefix of S. And 25 characters which don't increase the value of j).

The rest is just like the editorial. It was easier for me to reach the intended solution this way.

Actually this gives the idea to solve recurrence:

$$$f(0, 0) = 1$$$
$$$f(i, j) = a * f(i - 1, j - 1) + b * f(i - 1, j)$$$

In logarithmic time with linear preprocess (Read the editorial for F):

$$$f(i, j) = {i \choose j} * a ^ j * b ^ {i - j}$$$

Note that this is not true for problem F of this contest, because the value of j is at most the size of S, and there are some other constraints to reach state (i + 1, j + 1) from state (i, j).