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

Автор RobinFromTheHood, история, 2 месяца назад, По-английски

Thank you all for participating in the round! We hope you had fun, as we did thinking of the problems. We would like to again thank our coordinator Vladosiya who made many suggestions for improving all problems here, and rejecting others.

2014A - Robin Helps

Author: RobinFromTheHood

solution
code python
code cpp

2014B - Robin Hood and the Major Oak

Author: ChairmanFMao; Developer: Filikec, RobinFromTheHood

solution
code python
code cpp

2014C - Robin Hood in Town

Author: RobinFromTheHood; Developer: Filikec, RobinFromTheHood

solution
code python
code cpp

2014D - Robert Hood and Mrs Hood

Author: RobinFromTheHood; Developer: ChairmanFMao; RobinFromTheHood

solution
code python
code cpp

2014E - Rendez-vous de Marian et Robin

Author: RobinFromTheHood; Developer: Filikec, RobinFromTheHood

solution
code python
code cpp

2014F - Sheriff's Defense

Author: Filikec; Developer: Filikec

solution
code python
code cpp

2014G - Milky Days

Author: RobinFromTheHood; Developer: Filikec, RobinFromTheHood

solution
code python
code cpp

2014H - Robin Hood Archery

Author: Filikec; Developer: Filikec

solution
code python
code cpp
Разбор задач Codeforces Round 974 (Div. 3)
  • Проголосовать: нравится
  • +71
  • Проголосовать: не нравится

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

gigafast editorial 😬 btw for problem H, isn't checking (r — l) odd and number of uniq element is sufficient to answer query? I received WA2 with that approach

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

    the number of unique elements can be greater than 1 and yet the array is not losing.

    Here is an example:

    [3, 3, 1, 1]

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

    If by number of uniq element you mean printing YES iff the number of unique elements is 1, this misses other cases where its possible.

    Consider the following test case:

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

    the only check you need is whether any element appears an odd amount of times. if yes then the answer is no, and otherwise the answer is yes

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

Lightning fast editorial

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

Wow , problem G is so simple. Solid Problemset!

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

Problems are good, except for H which is a bit too common (but still educational :)). Fast editorial!

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

gonna hate myself for the rest of my life for messing up C.... i was sooooo closeeee

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

    Same as you, I used binary search to solve C ,and I was deeply annoyed by the edge situations mentioned in editorials … A so simple problem costs more than 1 hours

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

H should be placed before F imo

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

    We were discussing placing H differently but ended up placing it here as it needs specific algorithms. G could be solved with nothing advanced.

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

    I guess despite the fact that H turned out to be a famous problem, F didn't require any advanced algorithms knowledge. So it has a better chance to be solved by lower rated people

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

For problem C I used binary search on the possible values of x. When I made the upper bound of x = n*max_element+1 it gave WA but when I gave it as 1e18 it was accepted. Can someone explain this?

EDIT: originally wrote 2*max_element+1 . Updated to n*max_element+1 which is the upper bound that gave WA instead of 2*n*max_element

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

    I also encountered a similar issue when I solved the "C — Maximum Median" problem. I'd like to understand the story or concept behind this problem .

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

    maximum value of x can be (n * max_element + 1), in the case where all values are equal to max element

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

      Sorry, made a typo. I set the upper bound to n*max_element+1 in my solution but got WA before changing it to 1e18. What is wrong here? Is the division causing problem? Why is 2*n*max_elementthe correct upper bound?

      here is accepted 282332784

      and WA version 282330368

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

        Solve for test case:

        n = 4

        2 4 5 5

        According to your formula, upper limit should be 5*4+1 (21)

        But if you do calculation it will come out to be 25

        And 2*n*max is correct because we have to compare element with avg/2 not with avg

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

F is really nice. Consider a parent and child combination. If parent is not strengthened, then the answer remains unchanged. If the parent is strengthened then there are two cases:

  1. If child is not strengthened, then they lose c gold but it doesn't matter as it is not going to be counted anyway.

  2. If child is also strengthened, then it costs c from the parent, but now the deficit of c from the child also counts, so in total we get a[i] - 2*c in this case.

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

Glad we have proper anti-wrong-Dijkstra tests on E :)

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

Why do we need random numbers for the xor solution in H? Wouldn't the xor always be 0 if every element in a range occurred an even # of times?

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

    If you xor the original numbers instead of random ones, some of them may emit a zero even if not every element occurs $$$2k$$$ times. E.g. 1 2 3

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

    yes but the XOR can also be zero even though the range has some elements occuring odd number of times.

    for example:

    [1, 2, 3]

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

still i didn't understand E :)

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

A job between days li and ri would overlap with the visit if the start day x satisfies li−d+1 ≤ x ≤ ri

I didn't get this statement. Can somebody explain this?

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

    We can rearrange $$$l_i - d + 1 \le x$$$ to get $$$l_i \le x + d - 1$$$. If a visit starts on Day $$$x$$$ and spans $$$d$$$ days, Day $$$x + d - 1$$$ is exactly the last day of the visit. So $$$l_i \le x + d - 1$$$ means the job starts earlier than or exactly when the visit ends.

    Likewise, $$$x \le r_i$$$ means that the job ends later than or exactly when the visit starts.

    More intuitively, they overlap when there is at least one day where you would have to do some job while visited by your mother/brother.

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

I don't understand dijkstra probably. How does it get the correct shortest paths from source 1 for the sample test 5.

3 2 1
2
1 2 4
1 3 16

How does it go to $$$2$$$ and take the horse and come back ? Since d[source=1] = 0, I assume it(the source) would not (and should never ?)get relaxed by $$$2$$$. Also, there isn't any edge $$$E(2,3)$$$.

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

    You have to calculate two times for each vertex. The fastest time to get there without using a horse and the fastest time to get there using a horse. If you get on a horse at vertex v, then you continue traversing the graph, but you have to start updating the times for when you're on a horse.

    So in your example, you get on a horse at vertex 2 then go to vertex 1 since d_with_horse[1] = INF

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

      I see, thanks.

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

        You can define the "graph" as a pair of node, state and do dijkstra on this modified graph. Here, for a node u, the elements in the modified graph are (u, 0) for no horse and (u, 1) for a horse. Sometimes this state can have more values, be bitwise flag etc. as well.

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

Can someone provide a solution in python for problem B without using import sys, I am getting Time Limit Exceeded error

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

    It is an observation problem. First print sum of i ** i for low range. Then notice the odd-even pattern.

    t = int(input())
    for _ in range(t):
        n, k = map(int, input().split())
        a = (n % 4) in {0, 3}
        b = ((n - k) % 4) in {0, 3}
        if a == b:
            print('yes')
        else:
            print('no')
    
»
2 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I used same logic in C but still got WA. Can anyone tell my why? Thank you in advance. I did 2 different code but same logic. Still can't understand why it wasn't accepted.

282360605 282336672

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

    Both a[lastman] and n are ints, so a[lastman]*2*n can overflow when these are large.

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

      Sorry if this is a dumb question, but ansis long long. So it shouldn't be a problem?

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

        It doesn't matter whether you're assigning the result to a long long. You should note that every operation is done with types, and a[lastman]*2*n is a series of operations that is done only with int types. The overflow occurs right here, and assining is done after this overflow already happened. Once the overflow happens, there is no way to fix it back — its value is already broken (to be precise, it is already an undefined behavior.)

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

E can also be solved with a different approach Also. My idea is related to binary search the answer

Comment link of Solution : https://codeforces.me/blog/entry/134087?#comment-1200754

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

how is editorial even published 4 days ago?!

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

    The blog was private and made public after contest.

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

      OMG round developer's first reply on my comment... happy to see... BTW Can D be solved with the same kind of logic for CSES Movie Festival ?!

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

Why my solution is getting WA in problem H

Submission: https://codeforces.me/contest/2014/submission/282384796

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

    The array a has 1e6 + 5 elements, combined with T testcases, that yields a solution with a T * (1e6 + 5) time complexity for that alone, which in itself can exceed 1e10

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

I'm not sure if this was luck or actually correct

can someone try hacking this code for B

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

(Edit: having collision doesn't directly lead the solution to fail with high chance, see below comment for details.) For using hash for problem H, one need to use at least 64-bit hash or dual-hash.

Recall the probability for hash collision is $$$1-exp\left(-\frac{n(n-1)}{2d}\right)$$$, where $$$n$$$ is the number of elements and $$$d$$$ is the hash space.

if $$$n=1e6, d=2^{32}$$$, $$$1-exp\left(-\frac{n(n-1)}{2d}\right)\approx 1$$$ and it can be hacked

if $$$n=1e6, d=2^{64}$$$, $$$1-exp\left(-\frac{n(n-1)}{2d}\right)\approx 2.71e-08$$$

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

    Oh no, I woke up after sleeping and found out that my H had been hacked. I just realized that mt19937 only generates integers within int, so mt19937_64 should be used. But I'm still very curious about how you hacked me, constantly submitting random data?

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

      I didn't hack in this round. I originally thought the hacks use collisions, when I read some of the hack generators (and found them interesting!) I realized they are generating adversarial test targeting any deterministic hash functions. Yes time(0) as seed is deterministic in the context because one can generate hundreds of tests and the hack will be valid for a few minutes. Should use something less predictable like chrono::system_clock::now().time_since_epoch().count() (nanosecond)

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

    While this estimate is safer in general, you should notice that the solution for H this times only made n comparisons of hashes. Making it (1-2^32)^n, which is not that bad. This would fail with probability of about 0.00005. If were to go against 100 max tests, then there is a non-negligible chance that it fails, (0.5% roughly), but hardly a common thing.

    If the error estimate is indeed as bad as you claim, that it should have gotten a wrong answer on literally any random test.

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

the problem F can be solved by greedy??

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

Solved H just after the contest ended. QwQ

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

can resolve test case limitations!

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

In F, if instead of taking coins from only the neighbours we take coins from all the nodes, then how would we solve the problem?

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

    then xringe ah unworthy prblem, onli save till negative

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

      skibidi kinda fellow...

      ig pulling from all breaks down the tree structure and we can just iterate from the back of the sorted array and take elements based on that. This function is also monotonic but that unnecessary.

      What I meant that if the influence reaches to more than one level eg. neighbours at a distance <= k will also be reduced by c, then how to solve.

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

ngl i dont know why i do a O(10^6) G lol

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

Can anyone figure out what's wrong with my approach?

Submission: 282417933

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

    your handling of withhorse and found separately seems inappropriate. As if a horse is found once and we decide to sit on it, then we will be sitting on it for the rest of the journey itself.

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

Guys, can someone tell me why does my submission for D(282372366) get TL?

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

E was a nice problem. Loved the modified Dijkstra algorithm!

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

For B ,why (n-k+1)+n)*k/2 can't accept,WA in test3;(n-k+1)+n)*k//2 is right,I don't know!Who can help me?

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

    due to float handling, as during calculation of [(n-k+1)+n]*k ; and then dividing it by 2 can lead to a deviation from the actual answer (always an integer btw), and this very small deviation, will return a false when checked for divisibility with 2 without first converting it to a proper integer which it should be(as this small error will also be taken into account).

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

Nice Contest ! , RobinFromTheHood Orz .

Though this is my feedback :

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

Can anybody help me, this is giving TLE for E problem


#include <bits/stdc++.h> using namespace std; #define inf LLONG_MAX typedef pair<int, int> pii; typedef long long ll; int ini() { int x; cin >> x; return x; } void pl(ll x) { cout << x << endl; } vector<ll> paths(int n, int start, vector<vector<pii>>& path, set<int>& horses) { vector<ll> ans(n + 1, inf); set<pair<int, int>> visited; ans[start] = 0; priority_queue<vector<ll>, vector<vector<ll>>, greater<vector<ll>>> pq; if (horses.count(start)) { pq.push({0, start, 0}); visited.insert({start, 0}); } else { pq.push({0, start, 1}); visited.insert({start, 1}); } while (!pq.empty()) { vector<ll> data = pq.top(); pq.pop(); ll dist = data[0]; int node = (int)data[1]; int horse = (int)data[2]; visited.insert({node, horse}); if (horses.count(node)) horse = 0; for (pii p : path[node]) { int src = p.first; int dis = p.second; if (visited.count({src, horse})) continue; if (horse == 0) { pq.push({dist + dis / 2, src, horse}); ans[src] = min(ans[src], dist + dis / 2); } else { pq.push({dist + dis, src, horse}); ans[src] = min(ans[src], dist + dis); } } } return ans; } void solve() { int n = ini(); int m = ini(); int h = ini(); set<int> horses; for (int i = 0; i < h; i++) { int l = ini(); horses.insert(l); } vector<vector<pii>> path(n + 1); for (int i = 0; i < m; i++) { int u = ini(); int v = ini(); int dis = ini(); path[u].push_back({v, dis}); path[v].push_back({u, dis}); } vector<ll> p1 = paths(n, 1, path, horses); vector<ll> p2 = paths(n, n, path, horses); if (p1[n] == inf) { pl(-1); return; } ll ans = inf; for (int i = 1; i <= n; i++) { ans = min(ans, max(p1[i], p2[i])); } pl(ans); } int main() { ios::sync_with_stdio(false); cin.tie(0); int t = 1; t = ini(); while (t--) solve(); return 0; }
  • »
    »
    2 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Because the total time complexity is $$$O(n\ log^2\ n)$$$

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

      i tried changing the set to unordered set still didnt work there shdnt be any collisions for 1e5 right ?

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

    I have commented out your code.
    changes :
    1. used vector horses instead of set horses
    2. used vector<array<ll,2>> visited instead of set<pair<int,int>> visited;
    3. changed the position where you were checking visited node. Your code was pushing the same node more than once.
    optional : you may use priority_queue<array<ll,3>, vector<array<ll,3>>, greater<array<ll,3>>> pq; to reduce overhead. I will improve the code performance.

    My Code
»
2 месяца назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

https://codeforces.me/contest/2014/submission/282262350

This man managed to add comments and neatly format his code while solving the problem in 4 minutes. truly impressive

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

Can someone tell me what is wrong with this code and which testcase it will fail. Thanks!!

#include<bits/stdc++.h>
using namespace std;
int main() {
    int t;
    cin>>t;
    while(t--){
        int n,k;
        int count_zero=0;
        int count_sum=0;
        cin>>n>>k;
        vector<int>arr(n);
        for(int i=0;i<n;i++){
            cin>>arr[i];
            if(arr[i]==0) count_zero++;
            else if (arr[i]>=k){
                count_sum+=arr[i];
            }  
        }
        int result=min(count_zero,count_sum);
        cout<<result<<endl;
    }
    return 0;
}
  • »
    »
    2 месяца назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    You need to think again for the logic. Robing goes from 1 to N in order, we are not allowed to rearrage the array. Robin can only help if he has amount > 0.

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

      suppose this case — 1 2 3 0 0 0 0 0 0 0 where n=10 and k=4 in this- result(0, 7) -> result = 0 . Are you talking about this case where robin had zero gold??

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

        this case — 0 0 0 0 0 0 0 5 5 5 where n=10 and k=4
        you code will output 7 but answer is 0

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

WTF is this code, can someone tell me — 282251367 edit — MikeMirzayanov

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

    This is called obfuscation and it is forbidden by rules.

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

    I think they did it to avoid plag but anyways hiding solutions is not allowed

    rules

    "It is forbidden to obfuscate the solution code as well as create obstacles for its reading and understanding. That is, it is forbidden to use any special techniques aimed at making the code difficult to read and understand the principle of its work."

    MikeMirzayanov RobinFromTheHood

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

Just found out, c++ version can affect the hashing solution. I am used to c++17, but the editorial solution actually fails for c++17, submission: https://codeforces.me/contest/2014/submission/282483545.

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

Problem E was really good! I never thought Dijkstra's algorithm could be used in this way.

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

is it possible to solve D with lazy segtree? I overkilled it straight for 20 mins but I couldn't solve it during contest. If someone knows please tell

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

    Technically the range sum updates in D (as said in editorial) can be mimicked by lazy segtree; i.e. they do the exact work. Though I don't know why you would rely on segtree as your first option...

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

      with range sum updates, how will we identify the distinct overlaps? I wanna know how to solve it with lazy segtree for educational purposes

      Edit: I'm not talking about editorial solution in particular. Just if there's one

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

        I think I said bogus just now... now I can't think of any way to explain without clunking up the solution.

        Like, what I have in mind is a simple solution, doable in segtree but it just adds unnecessary extra steps.

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

        Thinking again, when writing a slightly related comment just below, I realize you can do segtree if you want to store the numbers of jobs for each range.

        Now, index $$$i$$$ in segtree will correlate to range ending at day $$$i$$$. Loop $$$i$$$ in range $$$[d, n]$$$ again:

        • "Add $$$s_i$$$ to $$$v$$$" correlates to "add $$$s_i$$$ to range $$$[i, n]$$$".
        • "Remove $$$e_{i-d+1}$$$ from $$$v$$$" correlates to "add $$$-e_{i-d+1}$$$ to range $$$[i+1, n]$$$".

        Of course, the last part means you'd just query a single index for all index in range $$$[1, n]$$$ just to get the min and max you wanted. Pretty tedious there...

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

IN Problem D

What will be the approach if 1<= l,r <=10^9?

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

Very hacky solution for D without prefix sum:

Count the number of jobs with the same start dates and end dates, separately. We'll call $$$s_i$$$ as the number of jobs start at date $$$i$$$, and $$$e_i$$$ as the number of jobs ends at date $$$i$$$.

Set a temporal value $$$v = 0$$$, now loop all end dates $$$1 \le i \le n$$$:

  • Add $$$s_i$$$ to $$$v$$$.
  • Now, $$$v$$$ is the number of job in range $$$[i-d+1, i]$$$. If the range is valid (a.k.a. $$$i-d+1 \ge 1$$$), update the optimal answer for both personnels.
  • Remove $$$e_{i-d+1}$$$ from $$$v$$$.

Submission: 282518960

I think this can extend to solve D with arbitrarily large $$$n$$$ with compression and a bit of extra tricks, but I'm not too certain.

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

For problem H, why isn't XORing from l -> r and checking non-zero a sufficient condition? I'm getting WA on test 3...

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

    One easy countertest: a range with elements $$$[1, 2, 3]$$$. You'll see the xor sum being $$$0$$$ but it isn't completely made of pairs of numbers.

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

Can anyone please help to find why is my solution for problem-C giving integer overflow?

solution

I have used ll as long long and it is giving overflow for val, which will at max be n*2*(max(a[i])) = 2*(2e5)*1e6 = 4e11 which should not give overflow for long long, like I get that there is no need for this long binary search but still I could not find why it is giving overflow

Thanks in advance

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

    Your m can be pretty large (1e18 / 2) and you add it to some array element and then multiply by n causing overflow.

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

I really like problem E!

I practiced a 2D dijkstra before so I am glad I can catch the idea really quick.

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

my submissionwhy am I getting tle in problem c ? pls help.

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

This is my code for Problem H

Spoiler

Why my code is getting WA on test 3 282785052 .

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

I was trying H, but getting WA on 75th TC. When I changed compiler to G++ 23 (from 17), it got AC. Does this happen usually in in these qns? I also tested locally but locally (with g++ 13), i was getting the right ans. Following submisison got AC by changing compiler, guidance appreciated on what to do in a contest setting. 282807018

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

can anyone tell why am i getting a tle in problem E 282462349

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

Hello everybody, i try to solve E so hard, but i get WA and don't understand why. May be some chads can help me?

282818149

P.S. Sorry for this large and bad code. I am ready for criticism and advice!

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

    Yo, as we have two states in the graph, our previous nodes which were once only 1, 2, 3, .., n

    But now we have 2d Nodes, {i, 0} or {i, 1}

    You haven't used the priority queue correctly Just think in 1d codes you have had priority queue as {dist, node} right So in 2d it should be a tuple as {dist, {node, 0 or 1}}

    Also remember this is actually like dynamic programming itself its just that in DP the state space graph is a DAG (acyclic) so we have to let the transition decide the {node, 0 or 1} in your code you have yourself initialized and transitions are also a bit incorrect

    General Tip this is State space modelling question so you need to think in DP manner to solve it efficiently

    For a good idea on State space modelling look into this Blog about Dijkstra and State Space Modeling

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

      Here is My approach — use state space formulation

      total Time Complexity = O( N LOG(N) ) multiplied by 2 as i am using dijkstra a 2 times;

      (node, 0) represents we don't have a horse (node, 1) we have the horse

      if( node has a horse in it and you are in the state node, 0 ) go to state (node, 1) with 0 cost as mentioned in the question

      if we are at (node, 1) then we can only go to (child, 1) with cost edgeWeight / 2

      if we are at (node, 0) then we can only go to (child, 0) with cost edgeWeight

      run this dijkstra from node number 1 and node number n for all nodes maximise the minimum distance from each node

      then for all nodes minimise the distance and find the minimum

      Submission Link quite self explanatory 283107392

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

in Problem E, why have we used comparator lambda function: make_pair(distance[a.first][a.second], a) <make_pair(distance[b.first][b.second],b) and not the distances of a and b states: d[a.first][a.second] < d[b.first][b.second];.
Is it because incase of two states having same distances, it will consider them equivalent? and if so, what difference will it make. would appreciate some help here, thanks!

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

    I think it's because when you have two distances that are the same, for example in the input example of the problem test case 5, when maria starts doing dijkstra, she will have two options that has the same distance value; 4. this causes the set to assume that they are the same value thus not inserting it into the set when we actually want it to be inserted.

    CMIIW

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

I have a doubt regarding problem H in this contest. My submission

// ll random_address() { char *p = new char; delete p; return uint64_t(p); } // ll splitmix64(ll x) {

// x += 0x9e3779b97f4a7c15; // x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; // x = (x ^ (x >> 27)) * 0x94d049bb133111eb; // return x ^ (x >> 31); // } // const ll FIXED_RANDOM = splitmix64(chrono::steady_clock::now().time_since_epoch().count() * (random_address() | 1)); why we have to use uint_64, i am not able to use ll as long long in the first line , when i am using ll it gives me error , why so could anyone explain please. and also explain how to write this function which randomly generate numbers because in the blog suggested by crystal it is difficult to understand so could you please explain here as i have write above code with the help of code submitted by neal , and actually i myself use some other technique to generate numbers in this solution and the code accepted and i was suprised because i used some random things, so could you please tell me some mathematics behind this that how it is working , and i also submitted two codes ,in one i was increasing x by 1e5 and in another one i was increasing by 1e8, and suprisingly the code with 1e5 accepted and with 1e8 it was giving wrong answer on test 5 . both code links are With x+=1e5 and with x+=1e8. and I have one more doubt when i was using M = 1e9+7 the code with x+=1e5 accepted and in same code i was using M = 999999937 in the code it is giving WA on test 5. So it is humble request to crystaI and RobinFromTheHood and other cf community coders to clear my doubt.

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

    please help me to understand this

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

    jb koi bta nhi rha tujhe to yaha pe chutiya doubt kyo puch rha he bsdk

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

    Mindeveloped and AkiLotus, please help to clear this doubt

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

      what???

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

        I have a doubt regarding problem H in this contest. My submission

        // ll random_address() { char *p = new char; delete p; return uint64_t(p); } // ll splitmix64(ll x) {

        // x += 0x9e3779b97f4a7c15; // x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; // x = (x ^ (x >> 27)) * 0x94d049bb133111eb; // return x ^ (x >> 31); // } // const ll FIXED_RANDOM = splitmix64(chrono::steady_clock::now().time_since_epoch().count() * (random_address() | 1)); why we have to use uint_64, i am not able to use ll as long long in the first line , when i am using ll it gives me error , why so could anyone explain please. and also explain how to write this function which randomly generate numbers because in the blog suggested by crystal it is difficult to understand so could you please explain here as i have write above code with the help of code submitted by neal , and actually i myself use some other technique to generate numbers in this solution and the code accepted and i was suprised because i used some random things, so could you please tell me some mathematics behind this that how it is working , and i also submitted two codes ,in one i was increasing x by 1e5 and in another one i was increasing by 1e8, and suprisingly the code with 1e5 accepted and with 1e8 it was giving wrong answer on test 5 . both code links are With x+=1e5 and with x+=1e8. and I have one more doubt when i was using M = 1e9+7 the code with x+=1e5 accepted and in same code i was using M = 999999937 in the code it is giving WA on test 5.

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

        i have asked in above mentioned comment

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

I mean to crystaI mistakenly same user name of both ids

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

Why is this giving TLE I have used Dijkstra Algo total states are 2 * N and number of edges are also of order N i.e M <= N

My approach use state space formulation


total Time Complexity = O( N LOG(N) ) multiplied by 2 as i am using dijkstra a 2 times; (node, 0) represents we don't have a horse (node, 1) we have the horse if( node has a horse in it and you are in the state node, 0 ) go to state (node, 1) with 0 cost as mentioned in the question if we are at (node, 1) then we can only go to (child, 1) with cost edgeWeight / 2 if we are at (node, 0) then we can only go to (child, 0) with cost edgeWeight run this dijkstra from node number 1 and node number n for all nodes maximise the minimum distance from each node then for all nodes minimise the distance and find the minimum

The approach seems correct as it is not giving WA, but fails to pass the time limit

here is the submission link Getting TLE on Test case 9 282838495

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

    Inefficient Dijkstra implementation — a same node tuple can exist in the PQ multiple times, and you need to skip the later ones instead of rerunning them as it could bloat the whole process into Bellman-Ford all over again.

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

      Damn lol I forgot to use the vis array which declared globally but i didn't use it in the dijkstra implementation

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

Problem H , Did anyone solve this with Divide and Conquer?

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

I loved problem F

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

In D , Can someone explain the 5th test case, the job is from 2 to 8, so why my answer can't be 2(brother) and 1(mother) ?

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

In problem C, we can avoid sorting the input by using the nth_element function, thus giving a time complexity of $$$O(n)$$$.

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

would appreciate if u could just go through this post and address my querry related to problem E(https://codeforces.me/blog/entry/134511) .

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

what is wrong in my code it is giving TLE on test 2 solution E

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

Thanks ! I've harvest a lot from problem F.

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

We should drink the latest milk ~

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

In problem H: there's no element with odd appearance if and only if the set of numbers with odd appearance in a1…al−1 is the same as a1…ar

Is there a proof for it?

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

I'm new to Mo's algorithm, can anyone explain to me how the Mo's algorithm solution of problem H doesn't get a TLE on the test case:

Test Case

Here's the python code to produce that input (n = q):

Code

I tried to run the author's solution on that test case and it's too slow. Maybe my test case does not satisfy the constraint? If so, how?

Any help will be appreciated!

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

aj<s+x2∗n in c why 2n and not n?

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

which day are they expecting in problem-D, I just don't get it, my answer sure is intersecting with the minimum and the maximum