Christine-'s blog

By Christine-, history, 3 days ago, In English

Introduction

Hello, Codeforces!

I want to share my suspicions about harsh__h.

I wouldn't write the blog if he was not a relatively high ranked individual who both participated in problem setting and testing. Yesterday, I accidentally noted that the 6th place (standings), in Codeforces Round 1002 (Div. 2), which turned to be harsh__h, had very suspicious submissions. Next, I will try to explain in detail what got my attention in the order in which I uncovered it.

Part 1. Codeforces Round 1002 Div2.

During the contest in problems A(304070640), B(304090034), C(304111128) harsh__h doesn't use spaces between brackets. That is, he writes, say, for(ll i=0;i<n;i++){ not for (ll i = 0; i < n; i++) {. Also, for the newline he uses endl cout << mex << endl;, and these are not interactive problems.

Next, In problems D (304092485), E(304129652), in which I think he used chatgpt, harsh__h uses spaces between brackets and keywords, for example, writing for (ll i = 0; i < n; i++) { instead of for(ll i=0;i<n;i++){. Here for the newline he uses ‘\n', cout << (ans == inf ? -1 : ans) << '\n';

In addition, compare how he read the graph just a week ago in another graph task 303111414. A week ago it was

for(ll i=0;i<n-1;i++){
    ll x,y;cin>>x>>y;
    x--;
    y--;
    adj[x].push_back(y);
    adj[y].push_back(x);
}

and yesterday it was

for (ll i = 0; i < m1; i++) {
     ll a, b;
     cin >> a >> b;
     --a;
     --b;
     g1[a].push_back(b);
     g1[b].push_back(a);
     e1.push_back({a, b});
}

Note also, that in 304129652 he doesn’t use spaces even in cin/cout. cout<<ans<<endl;

To sum up, the submissions look like they were written by different people.

After the contest I noted the unusual codestyle and here was his reaction

So he didn’t comment on the code style, instead he argued that he solved E1, E2, and that he, Codeforces master, doesn’t know if ChatGPT can solve a very straightforward 2059D - Graph and Graph.

Then, there was this guy MayankBhakat, probably his friend, who tried very hard to defend harsh__h, trying to ignore very suspicious codestyle.

Part 2. Educational Codeforces Round 173.

First, at this point harsh__h is a master, so Educational Codeforces Round 173 (Rated for Div. 2) is unrated for him. In this round harsh__h made submissions in very short intervals.

Let’s break it down.

2043A - Coin Transformation. In this submission 298252659 he doesn’t use his template. Also, it is very unusual when a codeforces master writes 50 lines of code to fail to solve Div2A. Then goes this submission 298254253. Now it is AC, and apparently, and someone left some comments).

Then, just 1 minute after he is done with A, he sends D 298254978, where he also does not use the template.

Then, 1 minute after the last D submission, he sends E 298257018 with the same code style as in A, D, which differs significantly from his usual style.

Then, 1 minute after the last E submission, he sends F, etc. So the submission history looks like this

I think that I made my point.

Part 3. Codeforces Round 956 (Div. 2) and ByteRace 2024 (UPD.1)

So, I decided to look into his older submissions. For example, Codeforces Round 956 (Div. 2) and ByteRace 2024.

Consider this submission 269285676 of 1983F - array-value. The codestyle

    while (lo < hi) {
        ll mid = (lo+hi)/2;
        if (slv(mid) >= k) hi = mid;
        else lo = mid+1;
    }
    
    cout << hi << '\n';

While another problem 1983E - I Love Balls in the very same contest 269275920

    if(bb%2==0){
        alice+=(((sum2*(bb))%M)*mod_inv(2,M))%M;
    }else{
        alice+=(((sum2*(bb+1))%M)*mod_inv(2,M))%M;
    }
    alice%=M;
    ll bob = sum*aa+sum2*bb-alice;
    bob%=M;
    bob+=M;
    bob%=M;
    cout<<alice<<" "<<bob<<endl;

Next, look at problem 1983D - Swap Dilemma, submission 269243749, where he doesn't use ll in count_inversion

    ll n;cin>>n;
    vector<int> a(n);
    cin>>a;
    vector<int> b(n);
    cin>>b;
    auto count_inversion=[&](vector<int> arr)->long long{
     
            int n = (int)arr.size();
     
            vector<int> buffer(n);
     
            function<long long(int,int,int,int)> combine=[&](int left_l,int left_r,int right_l,int right_r)->long long{
                int r_pointer=left_r;
                long long cnt=0;
            ...

In addition, check the comments for additional suspicios cases. So harsh__h has a quite long history of making very suspicious submissions. His results in these contests should be investigated, in my opinion.

Plagiarism detection complaint (UPD.2)

Yesterday harsh__h and MayankBhakat were very vocal about me providing any proofs. Sadly, today there are no comments from these guys when I listed a lot of suspicious code.

Also, it is quite interesting that MayankBhakat complains in his blog about him being flagged by the plag system. So now it is less surprising why he defended harsh__h.

Questions left unanswered (UPD.3)

Unfortunately, two days later, despite huge interest from the community, there is still no reaction from harsh__h and he has chosen to ignore everything waiting for the attention to the case to fade. This fact only makes the actions of harsh__h even more suspicious. MikeMirzayanov

Conclusion

Could you please MikeMirzayanov, Vladosiya, KAN check the submissions? harsh__h participated in problem setting and in testing in the past. I believe that this case should be investigated to keep the integrity and fairness of the future rounds. I really hope that harsh__h just has a very peculiar codestyle. Unfortunately, I am not sure at all that this is the case.

Also, I tried my best to not make any accusations but unfortunately the reaction of harsh__h MayankBhakat made me too emotional in my comments. For that I am deeply sorry.

  • Vote: I like it
  • +236
  • Vote: I do not like it

»
3 days ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by Christine- (previous revision, new revision, compare).

»
3 days ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by Christine- (previous revision, new revision, compare).

»
3 days ago, # |
  Vote: I like it +38 Vote: I do not like it

this is very sus ngl , if he is cheating then people are taking rating very seriously not knowing that it wont do shit to your linkedin profile or whatever

»
3 days ago, # |
  Vote: I like it +25 Vote: I do not like it

Sus indeed, so many wrong answer on pretest 1 shows lack of understanding own code.

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

Really good observation there. I'd also like to point out their submission to problem D in Codeforces Round 996 (Div. 2). 300718858. Comparing it to their submission of problem C 300684118, it almost looks very suspicious.

  • »
    »
    3 days ago, # ^ |
      Vote: I like it -15 Vote: I do not like it

    They look suspicious indeed. I think D is generated by chatgpt. Thank you.

»
3 days ago, # |
  Vote: I like it +11 Vote: I do not like it

The main question is, how will CodeForces detect AI-generated solutions, even if cheaters would tweak it to match their own coding style? The full o3 model is already said to have an ELO of 2727. The current trend seems to follow chess, where grandmasters were eventually overtaken.

  • »
    »
    3 days ago, # ^ |
      Vote: I like it +20 Vote: I do not like it

    If someone can implement stuff, then they can easily get good rating (not that it matters)

    They can just summarize the problems to GPT and GPT will give solution.

    Then don't take GPT solution and just implement the solution GPT gave u.

    Undetectable in my opinion.

»
3 days ago, # |
  Vote: I like it 0 Vote: I do not like it

I use Copilot. It does similar things to my code while autocompleting.

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

    You see, the thing is that inconsistency is persistent between submissions. I mean that there are 2-3 different codestyles and each submission completely follows one of these. It not just some parts of the code in some submissions, so that you can claim that it was an accidental copilot autocompletion.

»
3 days ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by Christine- (previous revision, new revision, compare).

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

Spacing coding styles is a chaos sometimes (esp when losing too much time for a problem in a live contest).

Coding templates are improves/changes over time, but drastically changed in styles is questionable...

But ngl with all those points you've made. It's kinda sus.

  • »
    »
    3 days ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Spacing coding styles is a chaos sometimes

    You are exactly right. A chaos. That is, something stochastic that changes a lot. And this is what missing over all the submissions I looked. There is no chaos. There is a consistency in the usage of several different types of codestyle.

»
3 days ago, # |
Rev. 2   Vote: I like it -45 Vote: I do not like it

Firstly, I don't think he cheated in yesterday's contest. Copilot is used by many people, including me. It's very easy to accuse someone of their best performance, but I see no evidence except for the lengthy complaints about spacing and some random claims that didn't even contribute to his rating. I still don't understand what you tried to prove and why you guys think that if someone supports another, they must be friends. Come up with better reasoning. Nowadays if someone performs well they first need to apologies and prove that they didn't cheat or else they would be accused of every crime.. Grow up

  • »
    »
    3 days ago, # ^ |
    Rev. 2   Vote: I like it +56 Vote: I do not like it

    Registered: 2 days ago

    Ah, well..... Why do I have a feeling that you created this account with the sole purpose of defending cheaters. I don't even know...

    • »
      »
      »
      3 days ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      he is cheated the code for D how someone got wrong attempt on A,B and solved D in 3 min -_- ban him

»
3 days ago, # |
  Vote: I like it +19 Vote: I do not like it

feeling so worst as an indian... finding that every cheater is belong to india now a days here..

»
40 hours ago, # |
  Vote: I like it +25 Vote: I do not like it

lol one of my classmate once submitted codes of different codestyles in a contest and I asked him whether he was cheating. He told me "I can place whitespaces where I want, this is my code!"

The next day he was banned.

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

I agree to you! Although there can indeed be variations in coding style within the same contest (for example, in Round 1002, when writing code for Problem D—after only passing Problem A—I was rushed to debug D. Unsure which array initialization caused issues, I changed all my usual global variables to local ones and removed my habitual "rep" macro for for-loops to improve readability... I think this is normal), aspects like spacing, header file usage, choice between int and long long, or endl versus '\n' are unlikely to vary significantly within a single contest—or even over time. These reflect deeply ingrained coding habits.

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

    Ngl your D looks pretty sus too. Not only you stopped using macros (also, not sure what you mean you removed them for readability, the code is clear with this small macro too).

    Here's what is also suspicious.

    So, your usual codestyle is

    rep(i, n + 1)
    {
        vis[i] = false;
        rep(j, n)
        {
            if (Map1[j][i] == i)
            {
                V[i].push_back(j);
                vis[i] = true;
            }
        }
    }
    

    While in the most gptable problem your codestyle is

    for (ll i = 0; i < m2; i++){
        ll u, v;
        cin >> u >> v;
        G2[u].push_back(v);
        G2[v].push_back(u);
    }
    
    ...
    
    while (!q.empty()){
        auto [d, u, v] = q.top();
        q.pop();
        if (d != dist[u][v])
            continue;
        if (u == v && good[u]){
            ans = d;
            break;
        }
    ....
    
    

    In addition to macros, look how the usage of brackets {, } is different. The manner of putting them is also a matter of habit and is very unlikely to vary.

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

      Okay, I’ll address all your questions below:

      1. Why did I stop using macros?
        First, let me explain my code structure. If you check my past submissions, you’ll notice I used to rely heavily on macros (this time, I simplified my 400+ line code library... which I think you can understand). The original macro was generated by VSCode’s CodeGEEX suggestion feature. Initially, it only included rep (iterating from 0 to n-1) and per (reverse iteration). Over time, I added many patches for convenience, like rep1, repi, repir, etc. I used to love these macros for speeding up coding, but their readability suffered. Occasionally, I’d mix up rep1 and rep. Regardless, I stuck with them. However, in the last contest, after only solving Problem A, I grew impatient and rushed to debug Problem D—a classic preprocessing + Dijkstra problem. My approach was correct, but the macro clutter slowed me down, so I decided to remove them entirely.

      2. Different bracket styles
        If you’re referring to curly brace formatting, let me clarify: The style in Problem D reflects my personal coding habit. However, I once enabled VSCode’s auto-formatting feature, which sometimes reformatted braces (e.g., to C-style brackets) when running code. If you’re skeptical, let me know in the comments—I’ll share my VSCode config files and plugins publicly!

      I categorically deny any cheating! I swear by my nationality. If you still suspect misconduct, DM me before future contests—I’ll record my screen with OBS during the round and publish the footage afterward!

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

      https://www.bilibili.com/video/BV1Hd4y1o7CN/ I configured my VSCode according to this video. If you don't know, you can follow the settings in this video and then download an extension called CPH Judge for operation. (I use this extension to test all my non-interactive problems because it's fast and doesn't require compilation.) You'll find that every time you run it, there's a probability (yes, it's a probabilistic event) that it will automatically format your code. Besides, if you want to see my code, I can send you a compressed package containing all the code I've written since I entered college (I've stored them all in the same folder). In it, you'll most likely see that many of my codes use the parentheses from Problem D mentioned above, and quite a few use those from Problem C. I think this is quite normal.

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

      Now I've more or less organized the differences between my solution to Problem D yesterday and my previous codes, and I can provide reasons for each of them.

      Regarding Macros: I've already addressed this above.

      Regarding Why I Didn't Use a vector Array to Build the Graph: If you've ever written code by creating arrays inside functions, you might have noticed that this can sometimes cause strange issues like memory limit exceeded... So currently, I mostly use STL containers within functions.

      To be honest, I've never given much thought to the matter of curly braces. I thought it was quite common for IDEs to automatically format code.

      Please excuse me for sending multiple replies. This is the first time I've been accused of cheating... I feel the need to offer a proper explanation. In addition, my comments may seem like they were machine — translated because I wrote them in Chinese first and then used Baidu Translate. Please forgive me for that.

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

        This is the first time I've been accused of cheating...

        Well, I've just said that your submission looked strange. I am trying not to make any premature conclusions.

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

          Yes, I understand. I apologize for my impatience, as having my code questioned is not a trivial matter to me. Additionally, regarding the curly braces format, you can check my previous submission for Problem A — it uses the same brace style as Problem D. In fact, many of my previous codes follow this pattern...which I believe should be sufficient proof of my consistent coding style.

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

      https://easylink.cc/orsbow Now I show the evidence.