GlowCheese's blog

By GlowCheese, 3 days ago, In English

1993A - Question Marks

Hint
Solution
Code (python)

1993B - Parity and Sum

Hint 1
Hint 2
Solution
Code (python)

1993C - Light Switches

Hint 1
Hint 2
Solution
Code (C++)

1993D - Med-imize

Hint 1
Hint 2
Solution
Code (C++)

1993E - Xor-Grid Problem

Hint 1
Hint 2
Solution
Code (C++)

1993F1 - Dyn-scripted Robot (Easy Version)

Hint 1
Hint 2
General idea (for both F1 and F2)
Solution
Code (C++)

1993F2 - Dyn-scripted Robot (Hard Version)

Solution
  • Vote: I like it
  • +60
  • Vote: I do not like it

»
3 hours ago, # |
  Vote: I like it +1 Vote: I do not like it

Wow really fast editorial thank you

»
2 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

D is cool

  • »
    »
    103 minutes ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    agree although i didn't solve it

»
2 hours ago, # |
  Vote: I like it +12 Vote: I do not like it

thanks for fast editorial

»
2 hours ago, # |
  Vote: I like it +7 Vote: I do not like it

can someone explain C

  • »
    »
    2 hours ago, # ^ |
    Rev. 2   Vote: I like it +9 Vote: I do not like it

    Realize that all the chips are activated after the max(a_i). Let's call the interval corresponding to this max time as interval I, and the chip corresponding to it as chip i. So, since the entire pattern of the intervals being on/off is periodic, we know that there is nothing special (i.e. different) that happens later (after interval I). So, we know that, if the intervals all overlap at some point, it will happen in this first occurrence of chip i being on, over interval I. So, we can just maintain the intersection of the ON intervals (within I) across all the chips, using a high and low. If we end the intersection with a valid interval, the answer is the earliest time in that interval, otherwise the answer is no.

»
2 hours ago, # |
  Vote: I like it -51 Vote: I do not like it

Can't believe such an unbalanced, mathy problemset is not from 74traktor.

  • »
    »
    2 hours ago, # ^ |
      Vote: I like it -14 Vote: I do not like it

    me too

  • »
    »
    116 minutes ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    cmon now, there wasn't so much math, unless you consider most div. 2's as being too mathy

    • »
      »
      »
      109 minutes ago, # ^ |
      Rev. 2   Vote: I like it +4 Vote: I do not like it

      F2 is too mathy, boring, tricky, and coding it just like fucking shit.

      It's the worst problem i have seen after goodbye 2023.

      • »
        »
        »
        »
        108 minutes ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        eh I didn't even read that problem. carry on.

»
2 hours ago, # |
Rev. 2   Vote: I like it +11 Vote: I do not like it

It's so refreshing to see all the participants solving the contest I'd tested.

Thank you GlowCheese for inviting me to become a tester.

»
2 hours ago, # |
  Vote: I like it +3 Vote: I do not like it

Thanks for the Editorial The problems are really fun :D

»
2 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

can we use binary search for problem C ? :)

  • »
    »
    2 hours ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    No, it's not a linear function :D

  • »
    »
    2 hours ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Yes, I used it in my solution

    • »
      »
      »
      2 hours ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      what did you use for the decision making in your binary search approach?

      • »
        »
        »
        »
        2 hours ago, # ^ |
        Rev. 2   Vote: I like it 0 Vote: I do not like it

        I just found that if the answer exist, all the lights will be turned on somewhere in the range [mx ; mx + k — 1], where mx is the biggest element in the array. So I used binary search to find for each element in the array the nearest minute (z) where at the minute z the current element will be turned on and the range [z ; z + k — 1] is intersect with the range [mx ; mx + k — 1]. and if the intersect exist for all elements then the answer exist and it is the first point of the range resulting from the intersections. I hope this is helpful.

        • »
          »
          »
          »
          »
          94 minutes ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          Hey Sandman10,

          How are you ensuring that you are only checking for even numbers, Like ai, ai + 2*k , ai + 4*k, because light will be ON only on even points.

          For doing so we need to do

          for (ll i = 0; i <= 1e9; i += 2) { arr.pb(i); }

          and this will result in MLE.

          • »
            »
            »
            »
            »
            »
            37 minutes ago, # ^ |
              Vote: I like it 0 Vote: I do not like it

            Exactamento!

          • »
            »
            »
            »
            »
            »
            19 minutes ago, # ^ |
              Vote: I like it 0 Vote: I do not like it

            u dont need to, since every segments of length k, with the leftmost point congruent to a[i] modulo 2*k, which means u only need to care about the remainder of every a[i], divided by 2*k (and of course, the largest value in the array)

        • »
          »
          »
          »
          »
          43 minutes ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          Honestly i feel like its not required. Implementing BS in that is like giving the TC extra logn factor to deal with instead we can just divide the distance from max(a) to a[i] by k and get the range for intersect based in the parity easily. I mean like ur solution is correct and u avoided the mathematical calculations successfully by integrating BS in ur solution but the TC increases by some multiple.

»
2 hours ago, # |
  Vote: I like it +1 Vote: I do not like it

Problem C was really funny.. thx :)

»
2 hours ago, # |
Rev. 2   Vote: I like it -12 Vote: I do not like it

Really great problems with nice observations, why is the editorial getting downvotes ? Is it because you guys are mad not able to solve the problems ?

»
2 hours ago, # |
  Vote: I like it +15 Vote: I do not like it

I enjoyed solving D and E very much :) which is quite rare for a div2 round

Thanks a lot

  • »
    »
    2 hours ago, # ^ |
      Vote: I like it +4 Vote: I do not like it

    I think you should have lowered constraints in E though since my and probably many others n^4 2^n did not pass, and the optimization is just boring

    • »
      »
      »
      2 hours ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      $$$O(n^4 2^n)$$$ still passes though as I set the time limit pretty high (5 times how intended solution should run), but you may find some luck to get it AC

      • »
        »
        »
        »
        2 hours ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Take a look at submissions, you will find a lot of TLEs.

        5x from n^3 2^n doesnt mean it will pass since going purely theoretically, its 15x

        My n^4 * 2^n took 13s on cf custom invo. I removed the factor of n to get it to 1.6s

  • »
    »
    2 hours ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I'm glad that you liked it :D

»
2 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Wow fast Editorial

»
2 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

wish i solved D, but really fun contest nonetheless!

»
2 hours ago, # |
  Vote: I like it -18 Vote: I do not like it

algorithm contest -> ❌ math contest -> ✅

  • »
    »
    2 hours ago, # ^ |
    Rev. 2   Vote: I like it +13 Vote: I do not like it

    It was never supposed to be an algorithm contest, this is a thinking and problem solving contest. Also which problem exactly needed math?

    • »
      »
      »
      2 hours ago, # ^ |
        Vote: I like it -18 Vote: I do not like it

      "it was never supposed to be an algorithmic contest"

      what a stupid thing to say

    • »
      »
      »
      2 hours ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      The number of using the word "mod" in the solution was more than the total number of questions.

      • »
        »
        »
        »
        2 hours ago, # ^ |
          Vote: I like it +10 Vote: I do not like it

        That is because it can be modeled in mathematical terms and that way the solution is easier to understand, it doesn't mean the solution is math based.

        • »
          »
          »
          »
          »
          118 minutes ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          how can you say C is not math?

          • »
            »
            »
            »
            »
            »
            113 minutes ago, # ^ |
              Vote: I like it 0 Vote: I do not like it

            It's not, in the editorial it is modeled mathematically to be precise. This was my thinking process: If there is a possible time, it will be in the first turned on interval of the maximum $$$a[i]$$$. So i will bring every $$$a[i]$$$ so that it intersects with the maximum $$$a[i]$$$ and update the left and right bound of the answer.

      • »
        »
        »
        »
        119 minutes ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        and still some of those can be solved without mod at all. C has mod in editorial but can be solved with a different approach that doesn't require mod

        • »
          »
          »
          »
          »
          98 minutes ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          Yes, I use some trick with the brain to solve it without mod 274409368, but still you need some good insight for the problem just to solve it :3

»
2 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Thanks for fast editorial!

»
2 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Ah, I should've been able to do B. Don't know where my code went wrong. Anyway, Thanks for the editorial.

  • »
    »
    116 minutes ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    in your code, whenever the "if(store < a)" is true, you can just print out the amount of even numbers+1. the solution will always be either 0, the amount of even numbers, or the amount of even numbers+1.

    • »
      »
      »
      24 minutes ago, # ^ |
        Vote: I like it +1 Vote: I do not like it

      Yes, I understood my mistake. I should've thought of this. Thanks for replying, buddy!

»
2 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Nice Solutions.

»
2 hours ago, # |
Rev. 2   Vote: I like it +2 Vote: I do not like it

The solution for F1 (and F2) is really elegant and tricky! I enjoyed (attempting to) solve the problem very much. Hope to see more of such problems.

»
117 minutes ago, # |
  Vote: I like it +3 Vote: I do not like it

Editorial is high quality. Nice problems too, been a while since I've seen a moving interval one (C).

»
109 minutes ago, # |
Rev. 3   Vote: I like it +2 Vote: I do not like it

274419542 why i didnt get TL for C task? Its O(n*k)

»
107 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

I don’t understand why binary searching works on D They aren’t even checking whether the bs element is present in array or not?

  • »
    »
    95 minutes ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    You are checking if the answer can be at least mid.

»
104 minutes ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

Can someone please explain in problem D if I am doing binary search on median and getting that number "mid" should be in middle, how am I even able to check by dp if I can remove segments accordingly, please explain the check function in simpler terms. Thanks in advance!

»
102 minutes ago, # |
  Vote: I like it +1 Vote: I do not like it

in C, I did linear search in the range max(array)to max(array)+k and got the answer. the check function i used for every numbers in the range is- ~~~~~ function<bool(int)>check=[&](int t){ for(int i=0;i<n;i++){ if((t-v[i])<0||((t-v[i])/k)%2!=0) return false; } return true; }; ~~~~~ can someone explain how these range working, also i think the complexity is O(N*k)??

»
98 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

E is really a good problem

»
95 minutes ago, # |
  Vote: I like it +1 Vote: I do not like it

Why, in problem C, the solution with time complexity O(nk) not giving TLE?

I first submitted O(nk) solution (274384802).

Then later, submitted O(n) solution (274394074).

After the system testing, I again submitted my O(nk) solution just to check if it is passing or not, and it got passed. I think the test cases were quite weak for Problem C

»
91 minute(s) ago, # |
  Vote: I like it 0 Vote: I do not like it

B- Parity and Sum

can someone please help me understand why my solution was WA on test case 2

C++ solution:

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

// Code By VibhuGodson
int main ()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    ll t=1;
    cin>>t;
    while(t--){
        ll n;
        cin>>n;
        vector<ll>evn;
        ll mxod=-1;
        ll x;
        for(ll i=0;i<n;i++){
            cin>>x;
            if(x%2) mxod=max(mxod,x);
            else evn.push_back(x);
        }
        sort(evn.begin(),evn.end());
        ll ans=0;
        if(evn.size()==0 or evn.size()==n){
            cout<<ans<<endl;
            continue;
        }
        for(auto&i:evn){
            if(i>mxod){
                mxod=2*i+mxod;
                ans+=2;
            }else{
                mxod = i+mxod;
                ans++;
            }
        }
        // cout<<"---------------";
        cout<<ans<<endl;
    }
    return 0;
}

I think the intution is correct, I'm doing the same same thing as per the solution

  • »
    »
    29 minutes ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    It's was my first try too. The problem that some times choose the biggest even number from evn, it's better than a smaller one. Because if you take $$$a > b$$$, which is at the end of evn, then you increase mxod and now mxod = mxod + max_elemen(evn), so now mxod is in 100% of cases is greater than any evn and ans += 2 isn't case

»
71 minute(s) ago, # |
  Vote: I like it 0 Vote: I do not like it

What is the dp state in the editorial of problem D?

»
60 minutes ago, # |
  Vote: I like it +7 Vote: I do not like it

As usual, thanks to the authors for this round ! Here is my advice about the problems:

A
B
C
D
E
»
58 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

In Problem D they did not specify that sum of k is less than 5e5, so after I got pretests accepted with O((n + k) * log(1e9)) per testcase solution, I assumed that it whould fail the system test because of the Time Limit. I fixed and resubmited the solution with O(n * log(1e9)) time complexity and it passed the system tests, but it seems like there was not any test case in the system tests that results in a TLE. So if anybody wants to get free hacks for problem D, they can easily construct a testcase where t = 1e4 and n = 1, k = 5e5 for each test case.

  • »
    »
    4 minutes ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    If k>n, the solution is trivial. O(n*log(n)) if you sort the array for finding the median

»
55 minutes ago, # |
Rev. 3   Vote: I like it 0 Vote: I do not like it

For D. My solution https://mirror.codeforces.com/contest/1993/submission/274431244 is giving RTE on the following test case:

1
1 500000
3169420

But when I am running it locally it is working just fine. Can anyone please help me?

  • »
    »
    49 minutes ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    for(int i = 0 ; i < k ; ++i){

    Your solution looped $$$k$$$ independently from $$$n$$$, and will fail if $$$k > n$$$.

»
47 minutes ago, # |
Rev. 4   Vote: I like it +2 Vote: I do not like it

I solved C, in a slightly different way

1) If the answer exists it's always going to be from (max(a), max(a)+k-1). (Observation from provided test cases).

2) so we add (2*k*r(some integer) to each element a[i] in place, such that a[i]+2k is just greater than max(a).(2k because in every 2k intervals the light will be on)

3) we need to find two things if(max(a)-min(a)>=k) the answer will be -1, else the answer is max(a).

Solution here: https://mirror.codeforces.com/contest/1993/submission/274401978

  • »
    »
    26 minutes ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    this ecxactly what i did, more easy to think and code,just greedy, no math no algorithm

»
36 minutes ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

Correct me, if I'm wrong, but shouldn't we choose both n+1th row and m+1th column at the same time to correctly calculate R and C?

I mean, e.g. when calculating C, we need at the same time remove one row (to look for the best solution on n remaining rows) and remove one column (because otherwise distance between rows cannot be calculated correctly). Hence complexity should be somewhat $$$O((n+1)(m+1) \cdot ((m+1)^22^{m+1} + (n+1)^22^{n+1}))$$$ or $$$O(n^42^n)$$$

»
36 minutes ago, # |
Rev. 4   Vote: I like it 0 Vote: I do not like it

I think the editorial for problem B is for another version of the problem where we can make operations on numbers having the same parity ? You could fix it by just removing the part talking about that x)

Btw it's quite cool that the editorial was writen that much in advance!

»
35 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

Guys i have a doubt

https://mirror.codeforces.com/contest/1993/submission/274430880

Im getting wrong answer on the above submission

but my other solution (https://mirror.codeforces.com/contest/1993/submission/274433114) is getting accepted why? i understand the logic of the 2nd one but whats wrong with my first submission?

  • »
    »
    18 minutes ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Consider test case with n = 3, a = [1, 2, 6]. Your algorithm would first set maxodd to be 1, then it would use 2 operations to turn 1 -> 3 and 2 -> 5, then 2 more operations to turn 5 -> 11 and 6 -> 17. But in an optimal answer you never need to use 2 operations on an even number more than once, so the actual answer is 3 and not 4.

  • »
    »
    16 minutes ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    If maxodd is less than v[i], you should add the largest even number to maxodd, instead of v[i]. Adding v[i] may lead to extra operations.

»
34 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

There's typo in editorial of D, it should be: $$$b[i]=1$$$ if $$$a[i]≥x$$$ right?

»
34 minutes ago, # |
  Vote: I like it +1 Vote: I do not like it

Funny thing is: there is a recent video with 3blue1brown which mentioned general idea from F (they called it quite popular but i'm not really into geometry so idk)

With that video in mind it was much easier to think up the solution

»
28 minutes ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

In problem B you must take numbers such that have distinct parities. So you can remove even + even & odd + odd options from editorial. EDIT: I'm a bit late to tell it first.

I think
»
13 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

~~~~~~~~~~~~~~~~~~~ import java.util.*; public class Main{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); int t=sc.nextInt(); while(t-->0) { int n=sc.nextInt();

int []a=new int[n];
      for(int i=0;i<n;i++)
      {
        a[i]=sc.nextInt();
      }
      int count1=0;
      int count2=0;
       int count=0;
      int olarge=0;
      int esmall=Integer.MAX_VALUE;
      Arrays.sort(a);
      int m=0;
      int j=0;
      int max=0;
      for(int i=0;i<n;i++){
    if(a[i]%2==0){
      count1++;
              if (a[i] < esmall) {
        esmall = a[i];
        m = i;
    }
    }
    else{
      count2++;
      olarge=a[i];
         if(max<olarge){
          max=olarge;
          j=i;
    }
    }
      }
      if(count2>0){
          olarge=max;
      }
    if(count1==n || count2==n)
    {
      System.out.println("0");
    }
    else{
      if(olarge>esmall)
      {
        a[m]=max+esmall;
          max=a[m];
          count=count+1;
      }
      else
      {
        a[j]=max+esmall;
        max=a[j];
        a[m]=max+esmall;
        count=count+2;
      }
      for(int k=0;k<n;k++)
      {
        if(a[k]%2==0 && a[k]<a[m])
        {
           a[k]=a[k]+a[m];
           a[m]=a[k];
           count=count+1;
        }
        else if(a[k]%2==0 && a[k]>a[m])
        {
          a[m]=a[k]+a[m];
          a[k]=a[m]+a[k];
          a[m]=a[k];
          count=count+2;
        }
      }
      System.out.println(count);
      }
    }
    }

~~~~~~~~~~~~~~~ can someone please tell me what is wrong in this only the last test case of test case 1 is showing wrong answer

»
11 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

GlowCheese

1) why the fuck is not k <= n in problem D, it makes no sense

2) why do tests not have k = max, and 1e4 tests???? How do you miss that in the tests. My solution uses an array of k size and passeed the initial tests https://mirror.codeforces.com/contest/1993/submission/274400595

»
4 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

Problem D might be my favourite problem ever.

»
2 minutes ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

Can anyone help me figure out what the time complexity is for my solution to D?

I used recursion with memoization to solve for the answer. Let the initial size of the array be N. I start with the full array, and using recursion I get the answer for every possible array of size N-K, and so on. I store the maximum answer. I keep doing that until the size of the array is smaller than or equal to K. Then I find the median of the array. I have an map which stores the indices that I have removed.

I'm thinking the time complexity is O(N^2log(n)). My reasoning is that there are ~ N^2 subbarays of different sizes, and the sort takes log(N) time. Is that correct.

This is my code: https://mirror.codeforces.com/contest/1993/submission/274435465

»
2 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

B Video Editorial : https://youtu.be/xTb58OEZnJM

C Video Editorial : https://youtu.be/6xtmLO43mD4