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

Автор DishonoredRighteous, история, 3 года назад, По-английски

1679A - AvtoBus

Author: iakovlev.zakhar

Preparation: DishonoredRighteous

Editorial: DishonoredRighteous

Editorial

1679B - Stone Age Problem

Author: Kon567889

Preparation: Kon567889

Editorial: DishonoredRighteous and Kon567889

Editorial

1679C - Rooks Defenders

Author: Kon567889

Preparation: Kon567889

Editorial: DishonoredRighteous and Kon567889

Editorial

1679D - Toss a Coin to Your Graph...

Author: Kon567889

Preparation: Masha237

Editorial: DishonoredRighteous

Editorial

1679E - Typical Party in Dorm

Author: andr1y and welleyth

Preparation: andr1y and welleyth

Editorial: andr1y and welleyth

Editorial

1679F - Formalism for Formalism

Author: iura

Preparation: iura

Editorial: DishonoredRighteous

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

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

I hope you enjoyed this round!

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

I believe that E would be much easier to understand with a formal definition.

Let $$$k$$$ be the number of '?' in $$$s$$$. For a given string $$$t$$$ with unique characters, let $$$sub_t(s)$$$ be the set of all $$$|t|^k$$$ ways to substitute a character from $$$t$$$ in each '?' in $$$s$$$. Let $$$f(s)$$$ be the number of pairs $$$1 \le i \le j \le n$$$ such that the string $$$s[i : j]$$$ is a palindrome, where $$$s[i : j]$$$ is the substring of $$$s$$$ from $$$s[i]$$$ to $$$s[j]$$$. Given $$$q$$$ queries of string $$$t_i$$$, compute and print

$$$\sum_{str \in sub_{t_i}(s)} f(str)$$$

for each query.

It removes a lot of ambiguity from the statement, and is easier to understand.

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

E good problem,but didn't solve.qwq

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

It seems that segment tree solution is acceptable for C but much slower. I don't know if it is because segment tree itself is so slow? Or is segment tree theoretically acceptable for this problem?(the time limit of 1000ms is a bit short for segment tree solution)

My submissions: TLE 157157377 157159053 AC 157166835

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

In first question i am unable to understand that how in case of minimization of buses the answer is n/6...please explain

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

    Since n cannot be odd, n should be even. Also n cannot be equal to 2. So n should be from the set {4,6,8,10.....}. Which means when divided by 6 the remainder will be either 0 or 2 or 4. Let x = n/6 and r be the remainder. If r is 0, you have all busses with 6 wheels, answer is x. If r = 4 you have x busses with 6 wheels and left with 4 wheels. So you can add a bus with 4 wheels, final answer becomes x+1. If r = 2, you have x busses with 6 wheels and note that x >= 1. You can remove a bus with 6 wheels and add 2 busses of 4 wheels. Answer again become x-1+(2) = x+1. So simply put it will be the ceil of n/6.

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

Can I ask that in Div2C, how we can use binary search to check whether that sub rectangle will be attacked by the rock?

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

In problem C, why this submission is WA and the other one is AC if they are pretty similar, I literally copy my previous segment tree methods into a struct with a few improvements. I couldn't find the bug :'(

WA: https://mirror.codeforces.com/contest/1679/submission/157262319

AC: https://mirror.codeforces.com/contest/1679/submission/157264397

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

can someone tell me why my C got FST

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

Problem C :

can someone tell me on which test case my code fails it give me WA on test 3 [27284th token]

Click here 157271735

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

    You can have more than one rook in a row/column. Since you are using your boolean array as an indicator of whether there is a rook in a particular row/column or not, you need to set/unset only when there is a new rook in that row/column or the current rook removed was the only rook of that row/column

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

      Problem C :

      Hi, can any one tell me what I'm doing wrong, I'm trying to solve the problem using BIT where the first pointer is 0 if no rock in line|column and 1 meaning at least a rock in the line|column, and the second one is the number of counts of rocks in that line|column , plz help me I toke more then 4 hours not finding the mistake.

      int n, q;
      
      int lowbit(int x) {
          return (x&-x);
      }
      
      void upd(int idx, int v, vii &ff) {
          for(;idx<=n; idx+=lowbit(idx)) ff[idx].f += v;
      }
      
      int sum(int idx, vii &ff) {
          int ans = 0;
          for(;idx; idx-=lowbit(idx)) ans += ff[idx].f;
          return ans;
      }
      
      void solve() {    
          cin >>n >>q;
          int t, x, y, x1, y1;
          vii f1(n+1, MP(0, 0)), f2(n+1, MP(0, 0));
          while(q--) {
              cin >>t>>x>>y;
              if(t == 1) {
                  f1[x].s++;
                  f2[y].s++;
                  if(f1[x].f == 0) upd(x, 1, f1);
                  if(f2[y].f == 0) upd(y, 1, f2);
              }else if(t == 2) {
                  f1[x].s--;
                  f2[y].s--;
                  if(f1[x].s == 0) upd(x, -1, f1);
                  if(f2[y].s == 0) upd(y, -1, f2);
              }else {
                  cin>>x1>>y1;
                  int ans1 = sum(x1, f1) - sum(x-1, f1);
                  int ans2 = sum(y1, f2) - sum(y-1, f2);
                  if(ans1 == x1-x+1 || ans2 == y1-y+1) cout<<"yes\n";
                  else cout<<"no\n";
              }
          }
      } 
      
      • »
        »
        »
        »
        3 года назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        if(t == 1) {
                f1[x].s++;
                f2[y].s++;
                if(f1[x].s == 1) upd(x, 1, f1);
                if(f2[y].s == 1) upd(y, 1, f2);
            }

        i think it's clear since you have to add 1 if the counter is 1 (was 0), or add -1 if the counter is 0 (was 1).

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

Can someone please tell me what is wrong with my code for the problem C. https://mirror.codeforces.com/contest/1679/submission/157259885

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

Can someone please explain why my submission for C is giving TLE. 157292933

Thanks

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

    use fast input output I got AC with your code, Time Limit is too tight

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

      Do you have information about where I can find the solution of fast IO for c++?

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

        ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); Add these 2 lines in your main Function, you can read more about it Stack Overflow

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
RMQ using segment tree

I don't know what to arr.assign()(is it also 0?) for range max queries. I hope the rest of the changes are correct for range max queries. Can anyone help me with it please?

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

Why this submission gets time limit. Can any one explain? I just run loop of O(n+q). Problem: B My submission link 157195608

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

Which test case I am missing in problem B? 157192323. I am getting WA on test 2 with message: wrong answer 58999th numbers differ — expected: '32583263977149', found: '32583727669172'.

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

My logic to A solution started from:

initial equation: $$$4 \cdot x + 6 \cdot y = n$$$

a note: $$$4 \cdot 3 = 6 \cdot 2$$$, so we can replace an equation with $$$4 \cdot x + 4 \cdot 3 \cdot y = n$$$ (if $$$y$$$ is even) or $$$4 \cdot x + 4 \cdot 3 \cdot y + 6 = n$$$ (if $$$y$$$ is odd).

We can check if $$$y$$$ is even, what possible when $$$n$$$ mod 4 = 0, and if $$$y$$$ is odd, what is possible when $$$(n - 6)$$$ mod 4 = 0. Otherwise (and in case with $$$n = 2$$$) there is no answer.

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

the author said for Problem D :

it's a well-known classical problem.

Can anyone suggest some similar problems or the classical one that the author is talking about?

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

In problem-4 it is mentioned that, It's guaranteed that graph doesn't contain loops and multi-edges. I want to know what is meant by loop? Is it different from cycle?

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

how does this code works for B

include <bits/stdc++.h>

define ll long long

using namespace std;

int main() {

ifndef ONLINE_JUDGE

freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);

endif

ll n, p, q, sum = 0, temp = 0;
map<ll, ll> mp;
cin >> n >> q;
for (ll i = 0; i < n; i++)
{
    cin >> p;
    mp[i] = p;
    sum += p;
}
while (q--)
{
    ll pos, x, t;
    cin >> t;
    if (t == 1)
    {
        cin >> pos >> x;
        pos--;
        if (mp.find(pos) == mp.end())
        {
            sum = sum - temp + x;
            mp[pos] = x;
        }
        else
        {
            sum = sum - mp[pos] + x;
            mp[pos] = x;
        }
    }
    else
    {
        cin >> x;
        mp.clear();
        temp = x;
        sum = temp * n;
    }
    cout << sum << endl;
}

} The time complexity is o(n+n*q) n and q is 2*10^5 so how is it able to work .The clear function takes o(n) time and if we just replace clear function with a for loop with makes the element of the array equal to x it shows TLE . Pls somebody who knows or implemented the same kind solution help me to understand ?? sorry for my pathetic english xd

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

    Yes, clearing the map takes $$$O(N)$$$, but it isn't $$$O(N+NQ)$$$, because sum of all sizes of map can be at most Q (at most 1 element can be added to map during each iteration). That is why this solution works in $$$O(N+QlogQ)$$$.

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

      how is log(q) coming I can't get it. suppose after initialising the array the first query is of type 2 then u have to remove the array by mp.clear() similarly if all query is of type 2 then would"nt it take n*q ??

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

        $$$QlogQ$$$ appears from calling map, because every call of map is made in $$$O(logSZ)$$$, where $$$SZ$$$ is size of the map.

        Let's suppose, you have 2 elements in array, then you cleared it, added another 4 elements, and cleared it again. The first clearing method was done in 2 operations, and second was done in 4 operations. So, if we write down sizes of map before each clearing, let it be $$$sz_1, sz_2, ... , sz_k$$$. It easy to see that $$$\sum_{i=1}^ksz_i \le Q$$$. So all clearing operations take at most $$$O(Q)$$$.

        PS: I actually don't know, is clearing is done in $$$O(SZ)$$$ or in $$$O(SZlogSZ)$$$ :thinking: :/

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

    Hey, why did you use map instead of unordered_map?

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

Video Solution for Problem D.

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

Can anyone post the editorial for C in easy words?

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

    If there is a query box with width W and height H, then to cover each cell there must be at least one rook in each row in the box, or at least one rook in each column in the box. So, if there is a row and a column in the box which don't have a rook in them, then there is a cell that is not covered. Otherwise, all cells are covered.

    We can do two(one for columns, one for rows) Segment Trees with checking, if there is a zero in the segment. If we add rook, we add +1 to the column and row in the trees. If we remove rook, than we add -1.

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

      If you don't know segment tree, you can also solve it by just using set ( one for column and one for row ) , let the set store the rows for which cnt[i]=0 , so if we remove a rook with {x,y} , we can add x back to row set if we have 0 rook in x row , and if we add a rook to set , we can erase x from row set , same goes for column set .

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

        This can be solved by using Square Decomposition too. Strangely enough, I've seen Segment Tree solutions which ran slower than my solution (These have almost the same optimization as mine), despite Seg tree has the complexity of O(N log N), and Square Decom has the complexity of O(N sqrt N). 165773252

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

Thanks for interesting problems!) In problem C I have the solution that has TL3 (https://mirror.codeforces.com/contest/1679/submission/157589950) without writing the "ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);" line at the beginnig of programm. But the same solution with the "ios" line (https://mirror.codeforces.com/contest/1679/submission/157589989) works correctly. That's kinda sad when something like this happens(

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
  1. For problem C, I used a square root decomposition data structure to pre-calculate query results (number of rooks in ranges of rows/columns).
  2. The solution seems to be fast enough as it has passed so many cases.
  3. My solution (https://mirror.codeforces.com/contest/1679/submission/157520096) produces wrong answer on test 35.
  4. Can anybody provide some insight on what might be wrong with my solution?
»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Hi, Could someone please help me out? Am not able to understand why https://mirror.codeforces.com/contest/1679/submission/157598442 throws TLE in test 7.

Approach: 1. Binary search over possible answer 2. for a potential solution x, build graph with only edges where both vertices are valid (a[node] <= x) O(m) 3. Dfs to check for cycle- 2 times dfs (To compute tin, tout for nodes and then to check) O(m+n) 4. If not cycle dfs to get the longest path O(m+n)

Complexity is be O(m+n)*log(MAX)

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

For problem C, if using C++, what data structure is used to store freeRows? If we use vector, insert an element in order will need O(n) time complexity? If we use set or list, we cannot do binary search for query type 3?

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

    Seems we should just use "set"? But I got TLE: https://mirror.codeforces.com/contest/1679/submission/157773752

    I see most acceptable solution uses BIT. Any acceptable solution uses the algorithm described in the tutorial?

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

        Thanks! But it is interesting that it is TLE now with the same implementation.

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

          The issue is not due to set (which is very fast), but because your I/O (cin, cout) is too slow (due to syncing with stdio). In particular, the input may have a very large number of values, so the syncing delay causes TLE.

          For fast I/O with cin and cout, you should add the following two lines to the start of your main function (or anywhere before the first use of cin/cout): ios_base::sync_with_stdio(false); cin.tie(NULL); Note that if you do this, then you shouldn't use scanf/printf alongside cin/cout, since they are not synchronized (e.g., a later scanf would read the same data that an earlier cin already read). This is fine if you don't use scanf/printf anyway.

          Yes, I know your comment is two months old, but I noticed that even your latest submissions continue to use cin/cout without disabling the synchronization, so I advise you to add those two lines to your template before you encounter another TLE in the future due to I/O syncing delays.

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

            Hi, thank you so much for the excellent explanation and suggestion! Really appreciate :)

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

does it say "Unable to parse markup [type=CF_MATHJAX" just for me when the editorial button is clicked on problem C?

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

A wonderful contest with problems of different level, and they are expecially suitable for a Chinese like me to improve my skill for the coming competitions. The editorial is also up to standard.

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

 Wtf????

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

this code(C. Rooks Defenders) can anybody help why my code is giving wrong answer on 23649th token?,please please https://mirror.codeforces.com/contest/1679/submission/158499479

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

    Consider the test case that CF-Stress produces in Ticket 7742. Your code is giving wrong answer on that particular test case. It might help you in debugging your code.

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

Do you know any similar problems to the 1679B — Stone Age Problem?

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

If anyone is interested, problem C can be solved with sqrt decomposition. https://mirror.codeforces.com/contest/1679/submission/158598103 my submition

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

If someone wants Here is my Submission for Div2 D : Toss a coin to your graph

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

Can someone help to debug my solution for problem D.

getDepth function returns -3 if cycle is detected else returns it's depth.

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

very nice tutorial for F

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

why am i getting wa on tc 3 [46944th token] [my solution](https://mirror.codeforces.com/contest/1679/submission/176050133)

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

In Problem C, What am I doing wrong here?

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

Problem D is really nice. It is of fine difficulty for problem D, not extremely difficult implementation, and overall a really well-crafted problem.

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

What am i doing wrong here in problem B 278706517