Блог пользователя Erfan.aa

Автор Erfan.aa, 10 лет назад, По-английски

459A - Pashmak and Garden

Four vertices of a square with side length a (and sides parallel to coordinate axis) are in this form: (x0, y0), (x0 + a, y0), (x0, y0 + a), (x0 + a, y0 + a).

Two vertices are given, calculate the two others (and check the ranges).

Total complexity : O(1)

Sample solution: 7495194

459B - Pashmak and Flowers

If all numbers are equal then answer will be n * (n - 1) / 2, otherwise the answer will be cnt1 * cnt2, where cnt1 is the number of our maximum elements and cnt2 is the number of our minimum elements.

Total complexity : O(n)

Sample solution: 7495202

459C - Pashmak and Buses

For each student consider a sequence of d elements from 1 to k that shows the bus number which is taken by this student on each day. Obviously, there are kd different sequence at all, so if n > kd, pigeonhole principle indicates that at least two of this sequences will be equal, so that two students will become close friends and no solutions exist. But if n ≤ kd, then we can assign a unique sequence to each student and compute the answer. For computing that, we can find the first n d-digits numbers in k-based numbers.

Total complexity : O(n * d)

Sample solutions: 7495236

459D - Pashmak and Parmida's problem

First of all, we can map the given numbers to integers of range [1, 106]. Let li be f(1, i, ai) and let ri be f(i, n, ai), we want to find the number of pairs (i, j) such that i < j and li > rj. For computing lis, we can store an array named cnt to show the number of occurence of any i with cnt[i]. To do this, we can iterate from left to right and update cnt[i]s; also, li would be equal to cnt[ai] at position i (ri s can be computed in a similar way).

Beside that, we get help from binary-indexed trees. We use a Fenwick tree and iterate from right to left. In each state, we add the number of elements less than li to answer and add ri to the Fenwick tree.

Total complexity : O(n * logn)

Also we can solve this problem using divide and conquer method. You can see the second sample solution to find out how to do this exactly.

Sample solutions: 7495225 7495225

459E - Pashmak and Graph

In this problem, a directed graph is given and we have to find the length of a longest strictly-increasing trail in it.

First of all consider a graph with n vertices and no edges, then just sort the given edges by their weights (non-decreasingly) and add them to the graph one by one.

Let dp[v] be the length of a longest increasing trail which ends in the vertex v. In the mentioned method, when you're adding a directed edge xy to the graph, set dp[y] value to max(dp[y], dp[x] + 1) (because of trails which ends in y and use this edge). You need to take care of the situation of being some edges with equal weights; for this job we can add all edges of the same weights simultaneously.

Total complexity : O(n + m * logm)

Sample solution: 7495216

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

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

Thanks for the fast editorial!

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

Can you please include judge's code that will be great.

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

i donot understand the E's solution cannot u explain in more details ??

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

in problem c it think it will be k^d not d^k

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

thanks for nice editorial.

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

How can you get the n * (n - 1) / 2 formula in B (otherwise than by wolfram alpha)?

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

    This formula is the number of unique pairs you can form with n given elements.

    Each element can be paired with n - 1 elements, and there are n total elements. If we multiply we get n(n - 1), but we must note that we've counted all pairs twice, so we must divide this number by 2 in order to get the right amount.

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

    you can't step in programmnig contests without this trivial knowledge :)

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

The solution of C(Pashmak and Buses) was awesome. Thanks a lot!!

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

I solved E with the same algorithm I get wrong answer in test 5 and don't know what's wrong ! this is my submission http://codeforces.net/contest/459/submission/7507479

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

Can anyone explain how to solve problem D using divide and conquer. I think the idea used in this problem is similar to finding the number of inversions in an array using divide and conquer.But, I am not getting how to solve it exactly..

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

    I can.

    In order to avoid using of data structures firstly compress all the numbers. Then you should calulate pref[i] = f(1, i, a[i]) and suf[i] = f(i, n, a[i]) for all i. Then you should simultaneously use merge-sort for pref and suf. And then you can do the same algorithm as for inversions by merging not prefl and prefr or sufl and sufr but prefl and sufr.

    I'll provide a code for this later.

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

in problem C,can someone please explain what the author means by "n d-digits numbers in k-based numbers."??

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

    n d-digits numbers basically means first n decimal based numbers and you need to represent those n numbers in the k-based numbers.

    For example, n=6, k=2, d=3

    first 6 numbers are 0,1,2,3,4,5. And in the 2-based number system(binary)

    000, 001, 010, 011, 100, 101. And we get 6 different sequences as described in the editorial. As the bus number starts with 1 we need to add 1 to each digit of the number. So the numbers in k-based or sequences now become 111,112,121,122,211,212.

    Hope this helps. My solution

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

http://codeforces.net/contest/459/submission/11762173 can someone help me with optimizations.used the divide and conquer technique. my code is getting tle. thanks :) ShayanH

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

For problem:D..just use fenwick tree to solve it. its fun to solve it with fenwick tree :-) my submission :- 17314867

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

    Its fun but I am not able to understand why were doing what were doing. I mean I understand why this works but I cant still explain to myself. Can you explain me please?

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

      i can try problem basically translates to finding all pairs such that

      1) i < j 2) number of a[i] from 1 to i > number of a[j] from j to n

      let count[a[i]] — count of a[i] from 1 to i

      for all i we will add to fenwick tree count[a[i]]

      now we will again iterate from beginning and keep on removing count[a[i]]

      what does my fenwick tree have at any i?

      for each "value" number of times that "value" can be obtained "value" is the count of some element from i + 1 to n

      now a simple query of count[a[i]] — 1 shall give me how many js are there such that count[a[j]] from i + 1 to n is lesser than count[a[i]] from 1 to i

      https://codeforces.net/contest/459/submission/85599666

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

        i am still not getting i have read your explanation 3 times...and i also know fenwik tree but still not getting...can you give some more explanation..?

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

        i didn't understand your last two liness for each "value" number of times that "value" can be obtained "value" is the count of some element from i + 1 to n

        • »
          »
          »
          »
          »
          4 года назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
                  for (int i = 1; i <= n; ++i)
          	{
          		f.update(totcnt[a[i]], -1);
          		totcnt[a[i]]--;
          		forwdcnt[a[i]]++;
          		ans += f.query(forwdcnt[a[i]] - 1);
          	}
          

          do u undertsand this part? i realised this part can explain more than my stupid english

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

            But fenwik tree is used to answer subarray sum queries ?? why are we using it here and please can you can just tell what is totcnt and forwdcnt ??

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

              fenwik tree gives me sum from 0 to R if i query on R i.e. prefix sum

              forwdcnt stores

              =>count of elements from 1 to i

              =>that have been seen upto i

              totcnt will store

              =>initially count for all elements in the entire array

              =>then as we iterate through the array we decrement the totcnt

              e.g. if my array is 1 1 1

              intitally forwdcnt[1] = 0 and totcnt[1] = 3

              after i = 1: forwdcnt[1] = 1 and totcnt[1] = 2

              after i = 2: forwrdcnt[1] = 2 and totcnt[1] = 1

              and so on

              https://codeforces.net/contest/459/submission/85599666 i think the code is easy and try tracing an example throught this code maybe??

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

            can you tell me the values of totcnt && forwdcntfor this test case(given in question)

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

              before loop totcnt[2] = 3 forwdcnt[2] = 0

              totcnt[1] = 4 forwdcnt[1] = 0

              after loop begins

              i   totcnt  forwdcnt
              
              1   1: 3    1: 1
                
                  2: 3    2: 0
              
              2   1: 3    1: 1
                  
                  2: 2    2: 1
              

              and so on

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

In problem C , Can anyone explain what does 'sequence of d elements from 1 to k' means in the editorial and how did we arrive to k^d , also how the pigeonhole principle is helping us here? Thanks. EDIT :- I solved the problem. Nice Editorial and Nice problem, I got it now. Thanks anyways.

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

    Each student can choose from k buses each day, so for each student there are k^d options to choose from for d days. Now there are total n students and we have to distribute these k^d options among them, if n>k^d, then at least two students will get exactly the same sequence for d days

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

Merge sort tree is getting MLE??Could someone tell me how to tackle this.My code : http://codeforces.net/contest/459/submission/36654409

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

Really good contest, with innovative problems. Here are all my solutions to the problems of this contest.

I liked C, especially the Pigeonhole Principle and I liked D for the data structures. I wrote an editorial on it here.

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

Why cant we use PBDS was problem D? it is giving me runtime error.. Can anyone explain me why ? Link to my solution- Your text to link here...

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

    could you identify the error?

    i had encountered a similar problem on using PBDS but there memory constraints were given less clearly there it was 28 MB https://codeforces.net/contest/1354/problem/D here though that isnt the problem...

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

    I thought of a simple solution using multiset first but it got TLE. Then I learnt about PBDS from gfg and used unordered_map in my code and it got AC.However, the same program with map got TLE. I am really not sure what's happening inside as I need to read how the data structure works but anyways, you can see my solution if it helps.

    My solution: 100429402

    Idea: I created the ordered_set of pairs by iterating backwards (from last index) in the array taking count of i-th element and the element as pair. Now I start iterating from 0th index and remove the current element and its count from the set and find the number of elements less than current count of i-th element using order_of_key.

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

      TLE'd because tight constraints? N <= 10**6

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

        For solution 100425668, it was not possible to pass since it was taking too much time as multiset does not provide an efficient solution for finding index of element. But, for the solution 100429256 and 100429402, you can see there is no difference other than map and unordered map. So, I think it was the map which was taking the extra time to keep its keys sorted. So, when I used unordered_map, I got AC. But still it took a lot of time(around 2.5s). I guess Fenwick Trees can give better solution.

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

In E, what if we're asked unique vertices (No, I am not curious, I interpreted the question wrongly, thought about it around 3 hours, then realized I had read the question wrongly).

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

How to solve E when the edges are undirected?

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

I tried D with seg tree, got a TLE at tc 9, any help would be appreciated

My submission

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

D could be done even by persistent segment tree

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

Can someone explain why in C using first n d-digits numbers in k-based numbers is right?

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

    I'll try to explain.

    Let us define each student's bus information(required answer) for all the d days in array info of size d where info[i] = bus that this particular student took in ith day

    Observation -> For two students to be friends this info array of both the students should be the same.

    Now we can form at max k^d combinations of busses and take n combinations from this set and assign each to a student so that there are no friends.

    So it's not necessary to take first n d-digits numbers in k-based numbers, rather we have to take n distinct d-digit numbers in k-based numbers

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

In problem C, Can someone please explain or give some references to why the code for generating first n d-digit permutations in the editorial generates the required permutations.

for (int i = 1; i < n; i ++) {
        for (int j = 0; j < d; j ++) ans[i][j] = ans[i - 1][j];
        for (int j = d - 1; j >= 0; j --){
            ans[i][j] = (ans[i][j] + 1) % k;
            if (ans[i][j]) break;
        }
    }

Thanks in advance.

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

Can anyone help me in D. Pashmak and Parmida's problem, getting TLE on test case 17 when impl with seg 209582654. and what is the problem with this submission- 192035586 As this submission passes 192038110 Only by just changing the query process. Thanks.