HubRis504's blog

By HubRis504, history, 3 weeks ago, In English

Some time ago, plagues published The most outrageous cheating in the history of Huawei Challenge, questioning whether several highly ranked accounts in the Huawei Challenge might have collaborated with each other. The original post was written with considerable confidence in labeling those accounts as cheaters. While some of the cases it discussed may have had relatively strong supporting evidence, many of the other connections were based on weaker correlations or incidents that, as far as I know, have not been independently substantiated. This post does not attempt to evaluate or revisit those allegations.

However, that post drew my attention to this account. I noticed an unusual period in plagues's rating trajectory, so I reviewed 59 of his CONTESTANT submissions from the following six contests. There are several differences in coding style and apparent origin among these submissions that I believe deserve an explanation, and I hope plagues can respond to them specifically.

Please keep in mind:

Differences in coding style alone do not prove that plagues used AI or engaged in any other form of cheating.

Frequently changing code skeletons

I found at least the following different code skeletons in plagues's submissions.

Their main differences include whether using namespace std; is used, the form of the loop over test cases, and whether std::cin.tie(nullptr)->sync_with_stdio(false); appears.

For the purpose of this comparison, I do not distinguish between int main() and int32_t main().

Skeleton 1

int main() {
    int t;
    std::cin >> t;
    while (t--) {

    }
}

Skeleton 2

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);
    int t;
    std::cin >> t;
    while (t--) {

    }
}

Skeleton 3

using namespace std;

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--) {

    }
}

Skeleton 4

using namespace std;

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--) {

    }
}

Skeleton 5

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);
    int t;
    std::cin >> t;
    for (int i = 1; t--; ++i) {

    }
}

Skeleton 6

int main() {
    int t;
    std::cin >> t;
    for (int i = 1; t--; ++i) {

    }
}

Below is a list of the skeletons used in these contests. The number in each cell denotes the skeleton used; clicking it opens the corresponding submission.

Order Capital Round 1 (Codeforces Round 1038, Div. 1 + Div. 2) — Contest 2122

A B C D
1 1 1 2

Codeforces Round 1040 (Div. 1) — Contest 2129

A B C1 C2 D E
1 1 1 1 3 3

Codeforces Round 1046 (Div. 1) — Contest 2135

A B C D1 D2
5 6 6 1 1

Codeforces Global Round 29 — Contest 2147

A B C D E G
4 4 4 4 4 4

Order Capital Round 2 (Codeforces Round 1104, Div. 1 + Div. 2) — Contest 2237

A B C D E F G
4 4 4 4 4 4 communication problem

Codeforces Round 1105 (Div. 1) — Contest 2239

A B C D
4 4 4 4

Why did your code skeleton repeatedly switch between Skeleton 1 and other skeletons during the first three contests?

In particular, how do you explain using namespace std; repeatedly appearing and disappearing, as well as the different forms of the test-case loop?

Why, starting from Codeforces Global Round 29 (Contest 2147), did your submissions suddenly become consistently standardized on Skeleton 4? I could not find a single use of Skeleton 4 in the three contests above it.

And this transition happened in exactly the contest where you became a Grandmaster.

Is this a coincidence?

Please explain.

An unusual 2129D

plagues's submission 331847745 for 2129D differs from his other submissions in many respects.

In this submission, he uses T(expr) syntax to convert expressions to fundamental types. For example:

int m(long long x, long long y) { return int((x * y) % M); }

inline uint32_t P(uint16_t x, uint16_t y) { return (uint32_t(x) << 8) | y; }

In his other submissions, he normally uses (T)expr or (T) expr.

For example, in his 2129E submission 331855693 from the same contest, he wrote:

int Bsz = max(1, (int) sqrt(n));

The only exception I found is in his 2135C submission 336011001, where he wrote:

if (a[v] == -1) return void(a[v] = x);

In the 2129D submission, every ordinary C-style for loop uses postfix increment:

for (int i = 0; i <= n; i++)
for (int j = 1; j < i; j++)
for (int i = 1; i <= n; i++)
for (int i = 0; i <= n; i++)
for (int g = 2; g <= n + 1; g++)
for (int l = 0; l + g <= n + 1; l++)
for (int x = l + 1; x < r; x++)

There are 7 such loops.

I counted all ++ expressions in ordinary C-style for loops across his submissions from these six contests, excluding generic template libraries such as AngelBeats and BigInt.

There are 171 in total.

Of these, only 10 use postfix increment.

This single file contains 7 of those 10 postfix increments, while containing 0 of the other 161 prefix increments.

This submission also frequently uses the form for (expr1)expr2, with no space before expr2, for example:

for (int j = 1; j < i; j++)c[i][j] = a(c[i - 1][j - 1], c[i - 1][j]);
for (int i = 1; i <= n; i++)t[i] = v[i - 1];
for (int i = 0; i <= n; i++)d[i][i + 1][P(0, 0)] = 1;

if (l && r != n + 1)q = (x - l <= r - x) ? l : r;
else if (l)q = l;
else if (r != n + 1)q = r;

if (t[x] != -1 && k != t[x])continue;
if (l && t[l] != -1 && y > t[l])continue;
if (r != n + 1 && t[r] != -1 && z > t[r])continue;

for (int &x: v)cin >> x;

In his other submissions, the corresponding style is consistently for (expr1) expr2, with a space before the body.

The non-main top-level functions in this submission are:

a, m, b, P, L, R, s

I did not find this function-naming style in his other submissions.

Why is this particular submission so unusual that it differs from his other submissions in so many independent stylistic details?

Addendum: Two Different Fenwick Tree Implementations in the Same Contest

In the first version of this article, I overlooked another highly suspicious issue.

His Fenwick tree in 331780529 is written as follows:

struct BIT {
    std::vector<int> t;

    BIT(int n): t(n + 2) {}

    void modify(int i, int x) {
        for (++i; i < t.size(); i += i & -i) t[i] += x;
    }

    int get(int i) {
        int ans = 0;
        for (++i; i; i -= i & -i) ans += t[i];
        return ans;
    }
    int get(int l, int r) {
        return get(r) - get(l - 1);
    }
};

However, his Fenwick tree in 331855693 is written as follows:

struct B {
    static vector<int> t, z;
    static int c;
    int n;

    B(int N = 0) : n(N + 1) {
    }

    static void nxt() { ++c; }

    void upd(int i, int v) {
        for (++i; i <= n; i += i & -i) {
            if (z[i] != c) {
                z[i] = c;
                t[i] = 0;
            }
            t[i] += v;
        }
    }

    int kth(int k) {
        int i = 0;
        for (int b = 1 << 18; b; b >>= 1) {
            int j = i + b, v = (j <= n && z[j] == c ? t[j] : 0);
            if (v < k) {
                k -= v;
                i = j;
            }
        }
        return i;
    }
};

vector<int> B::t(S + 3);
vector<int> B::z(S + 3);
int B::c = 0;

These two pieces of code come from the same contest.

I can understand that the two Fenwick trees have different overall designs and query interfaces because they were used for different purposes. However, please explain why BIT became B, and why void modify(int i, int x) became void upd(int i, int v).

Today, generative AI can imitate an existing coding style when prompted to do so. Therefore, stylistic characteristics of a single piece of code are difficult to treat as decisive evidence by themselves.

That is also why I am focusing on these relatively uncommon differences in style.

So please forgive me for examining your code this closely.

I am not accusing you of being a cheater.

I am only asking you to provide a specific and reasonable explanation for the observations above.

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

»
3 weeks ago, hide # |
 
Vote: I like it +32 Vote: I do not like it
»
3 weeks ago, hide # |
 
Vote: I like it +61 Vote: I do not like it

I think plagues should record himself participating in a Codeforces Div. 1 or Div. 1 + 2 round and upload the video publicly. That would explain everything much better. Otherwise, words alone aren't very convincing.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it -19 Vote: I do not like it

    Actually, I’ve always thought about doing something like this, so I’m not against it :) Maybe I’ll do it someday in the future.

    • »
      »
      »
      3 weeks ago, hide # ^ |
       
      Vote: I like it +14 Vote: I do not like it

      I think you really should record yourself at least once. Your coding style is quite unusual, and if you can reproduce it in a recording, it would definitely make for a very entertaining video.

      • »
        »
        »
        »
        3 weeks ago, hide # ^ |
         
        Vote: I like it +8 Vote: I do not like it

        face reveal?

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

          Yeah, definitely. Ideally, there should be both a front-facing camera and a camera showing the screen/keyboard setup. I honestly don't think he would be able to reproduce this coding style while still achieving a 2600+ performance.

          He obviously has some level of skill, but that's exactly the point someone who is already strong and cheats can naturally achieve a much higher performance than someone starting from zero. Just like how it would obviously be much easier for a 2400+ player to cheat their way to 3000 than for someone with absolutely no background.

          His explanation is very weak, and there are a lot of traces in his code that look suspiciously AI-generated. I would much rather see him reproduce those same kinds of patterns in a recorded contest.

          And o3-pro already existed in June 2025. You know what that implies.

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

            You know what will happen when he says "I'm just choke a little bit"

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

              Being able to write code in this kind of joking, performance-art style already means he's spending part of his attention on the style itself. So if this is genuinely how he codes, I'd expect his actual performance level to be at least 3000+. Even if he's nervous during the recording, he should at most drop a bit from his supposed 2600 level.

              So first, let's see whether he can reproduce this "performance-art" coding style in a recorded contest and still achieve a 2500-level performance.

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

          I can understand it happening once or twice, but what about when it happens many times? There are problems again and again, and they always seem to show up at crucial moments — especially around the key turning point where he went from 2000 to 2600. That alone is already pretty suspicious.

»
3 weeks ago, hide # |
Rev. 5  
Vote: I like it +41 Vote: I do not like it

I suggest you better make a detailed analysis on his submission of 2129D.

I think it's too funny to be a human-made code.

  • strange c++98-styled template class clarification: (notice the space between >>)
vector<vector<unordered_map<uint32_t, int> > > d(n + 2, vector<unordered_map<uint32_t, int> >(n + 2));
  • Err... I don't want to say any word.

In main

while (t--) {
        int n;
        cin >> n;
        vector<int> v(n);
        for (int &x: v)cin >> x;
        cout << s(v) << '\n';
    }

In s(v) which is just called once:(vector v didn't appear in other places)

int s(vector<int> &v) {
    int n = v.size();
    vector<int> t(n + 2, -1);
    for (int i = 1; i <= n; i++)t[i] = v[i - 1];
    auto C = b(n);
    vector<vector<unordered_map<uint32_t, int> > > d(n + 2, vector<unordered_map<uint32_t, int> >(n + 2));

And there's a function b(n) also just called once:

vector<vector<int> > b(int n) {
    vector<vector<int> > c(n + 1, vector<int>(n + 1));
    for (int i = 0; i <= n; i++) {
        c[i][0] = c[i][i] = 1;
        for (int j = 1; j < i; j++)c[i][j] = a(c[i - 1][j - 1], c[i - 1][j]);
    }
    return c;
}

Btw, I think Skeleton difference could be explained if he wants to deny. As for the transfer, I myself sometimes mix those types, and I even mixed initializations like int x = 0 and int x(0);. The space after loop can be explained as the malfunctioning of formatter, while > > can't.

»
3 weeks ago, hide # |
Rev. 12  
Vote: I like it +41 Vote: I do not like it

After reading this post, my initial reaction was that publicly accusing someone without sufficiently strong evidence was wrong. However, after examining two of plagues submissions myself, I found it increasingly difficult to believe that no generative AI was involved.

First, consider this submission:

The function $$$b(n)$$$ constructs the entire Pascal triangle in $$$O(n^2)$$$, yet it is called inside $$$s(v)$$$, which is executed separately for every test case. Therefore, the submission repeatedly performs the same quadratic combination-number preprocessing, for a total complexity of

$$$O\left(\sum_i n_i^2\right),$$$ or $$$O(Tn^2)$$$ in the worst case.

This is not a subtle optimization issue. Any experienced contestant—let alone an IGM—would know to precompute the table once up to the maximum required $$$n$$$, rather than rebuilding it for every test case. Repeating a complete quadratic preprocessing in this way is simply not the kind of elementary mistake I would expect an IGM to make.

There is also this submission:

The highlighted loop appears to search for the best value of $$$x$$$ from $$$1$$$ to $$$10$$$ by maximizing the size of $$$ws2$$$. Whether an element is inserted into $$$ws2$$$ is determined by $$$s+x \gt w$$$.

As $$$x$$$ increases, this condition only becomes easier to satisfy. Therefore, the set of input elements that qualify for $$$ws2$$$ can only grow, meaning that the size of $$$ws2$$$ is monotonically non-decreasing with respect to $$$x$$$. Its maximum over the range from $$$1$$$ to $$$10$$$ must consequently be attained at $$$x=10$$$.

It is deliberate code camouflage: a predetermined constant assignment has been wrapped inside a meaningless pseudo-search to make it look like genuine algorithmic reasoning. Its purpose is to disguise the code and evade AI-detection checks.

These are not merely unconventional stylistic choices. One submission repeats an obviously unnecessary $$$O(n^2)$$$ preprocessing for every test case, while another deliberately conceals a predetermined constant behind a ten-iteration pseudo-search. Together with the extremely unnatural naming, control flow, and data structures, this looks much more like generative-AI output that has been intentionally disguised than code genuinely written by an IGM.

At this point, I honestly cannot convince myself that no generative AI was used. I can hardly believe what I am seeing.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it +11 Vote: I do not like it

    I would push back on the n^2 thing. Like yesterday I just recomputed my DP by hand in each test case just because I was lazy and I had no concerns that it wouldn’t pass. I will not comment on the other evidence, which looks mostly solid to me from a first read so far.

    • »
      »
      »
      3 weeks ago, hide # ^ |
      Rev. 2  
      Vote: I like it +27 Vote: I do not like it

      But the second point he deliberately obfuscated the code in order to evade AI-detection checks.

      • »
        »
        »
        »
        3 weeks ago, hide # ^ |
         
        Vote: I like it -31 Vote: I do not like it

        I didn’t mention this in the full version of my response because I simply hadn’t noticed it.

        The dfs in that submission is never called at all. It was just code for locally brute-forcing cases and debugging.

        In that case, the “indefensible” claim that this was done “in order to evade AI-detection checks” does not withstand any scrutiny whatsoever.

        • »
          »
          »
          »
          »
          3 weeks ago, hide # ^ |
          Rev. 4  
          Vote: I like it 0 Vote: I do not like it

          Second edit: During my evidence-gathering investigation, I realized that I may not have fully considered some aspects. However, that does not mean the existing evidence is entirely wrong.

          so all evidence can only serve as grounds for suspicion; it does not mean that he actually cheated.

        • »
          »
          »
          »
          »
          3 weeks ago, hide # ^ |
           
          Vote: I like it +13 Vote: I do not like it

          If that code really was only for debugging, then judging from your first response, you didn't seem to realize that immediately at all — you even appeared to think it was your own mistake. That in itself is already quite suspicious and I'm not saying that you definitely cheated. But just like in the post you made, we shouldn't let any suspicious detail go unquestioned.

  • »
    »
    3 weeks ago, hide # ^ |
    Rev. 2  
    Vote: I like it +42 Vote: I do not like it

    This makes no sense at all. The point of contests is to get AC, not write the most optimal code possible. I'm sure every LGM has submitted suboptimal code in a contest before. If the goal was obfuscation, there are much better ways to do it than this

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

How the turns have tabled...

»
3 weeks ago, hide # |
 
Vote: I like it +5 Vote: I do not like it

Hi!

I’ll gladly explain this.

First of all, if you want, you can do a more detailed analysis of my submissions over all these years.

My coding style has changed a lot at different times.

For some time, I used a lot of templates like

#define vector<vector<vector<long long>>> vvvll

and special template functions like sort(a), where a is a vector. Starting from C++23, something similar appeared in ranges.

There were even pictures and funny comments in my code, but later I stopped doing that.

My code used to contain a lot of indentation and extra lines, but later I realized that I don’t want things that are obvious from context, for example input, to take more than one line. Moreover, I often even write DFS in one line.

For example, you can definitely find something like this in my code:

for (int v, u, i = 0; i < n && cin >> u >> v; ++i) g[v].push_back(u), g[u].push_back(v);

Moreover, I used to always write using namespace std, but over time I got inspired by jiangly and stopped using it, because CLion is perfectly capable of automatically adding std:: to anything from std. For example, I type set, press Enter, and CLion completes it as std::set. I think this is a cool coding style.

But this does not always work. Moreover, at some point it broke in CLion, and I even submitted an issue about it on YouTrack after which JetBrains fixed it.

But obviously, in CP, using std:: is not always convenient, especially when you stop participating in rounds frequently. So in harder problems I often just stop caring about it and use using namespace std so that I have enough time to write all the problems.

You can also notice that I try to fit the first problems into the minimum possible number of lines, but problems where I need to be able to easily change or debug the code have to be much more spread out. This is also very noticeable and quite obvious.

Regarding

for (int i = 1; t--; ++i) {

apparently, in some problem before that round I had to use the test case number. Moreover, you yourself pointed out that this happened only in one round.

I often delete everything from main during a round. I don’t think this is even remotely a strong reason to think that I’m a cheater.

Regarding "strange c++98-styled template class clarification".

Cmd + Option + L is Reformat Code in CLion. It adds those spaces itself. I’m simply too lazy to dig through clang-tidy/code style settings to fix this.

This, by the way, also explains the occasional lack of spaces after my one-line fors.

Someone also wrote about O(Tn^2) in one of the problems involving Pascal’s triangle.

Well, this is basic stuff. Over time, you realize that in competitive programming it is important to write code quickly, not optimally.

For example, I can often allow myself to do some simple counting of the number of elements in an array in O(n^2), simply because it is trivially more convenient to write.

Obviously, C(n, k) is not some super complicated function, but I write code from scratch, and spending an extra minute building two arrays f and nf and then writing the formula seemed pointless to me that time, when the problem constraints allowed me to write an O(Tn^2) solution that easily passes the TL.

I consider this accusation especially meaningless.

Regarding ps = 10. It wasn’t obvious to me. Even IGMs can sometimes fail to notice obvious things :)

This accusation also seems absurd to me, simply because — why?

In general, I consider everything I responded to above completely pulled out of thin air.

Seriously, sometimes there is using namespace std / sometimes there isn’t, sometimes I write Pascal’s triangle in quadratic time — cheater?

The only thing that I actually consider a fair question is 2129D.

Here the answer is ridiculously simple: I was just having fun. I just wanted to write funny code.

This is literally one problem out of more than 100 rounds that I have participated in.

Moreover, I wrote this problem incorrectly 3 times in a row, and at some point it pissed me off. I had very little time left, so I decided to write the shortest code I could while also making it as ugly as possible.

Seems like I succeeded.

I also don’t really understand what unfair advantage this could have given me, considering that, as far as I remember, this was before LLMs learned to solve problems this difficult.

Also, we discussed this problem with my friends, and everyone laughed at my submission :)

Thank you very much for not being indifferent and, just like me, trying to find cheaters on Codeforces :)

  • »
    »
    3 weeks ago, hide # ^ |
    Rev. 5  
    Vote: I like it 0 Vote: I do not like it

    I was somewhat reckless, and I apologize to you for that. However, your style really is rather strange. so all evidence can only serve as grounds for suspicion; it does not mean that he actually cheated.

  • »
    »
    3 weeks ago, hide # ^ |
    Rev. 7  
    Vote: I like it -10 Vote: I do not like it

    updated: Now I do think these two pieces of code may be perfectly normal. But please take a look at my reply in the subthread about the two different Fenwick implementations he used in the same contest. I still find that very suspicious.

    339593258

    int pw(int x, int y) {
        if (!y) return 1;
        if (y & 1) return pw(x, y - 1) * x % MOD;
        return pw(x * x % MOD, y / 2);
    }
    

    380363510

    int pw(int x, int y) {
        int ans = 1;
        for (; y; (x *= x) %= MOD, y /= 2) if (y & 1) (ans *= x) %= MOD;
        return ans;
    }
    
    • »
      »
      »
      3 weeks ago, hide # ^ |
       
      Vote: I like it +4 Vote: I do not like it

      I don't think this is very convincing evidence of cheating, since there's such a long gap between the two submissions. That's more than enough time to change the implementation style quite a bit

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

        You're right. Are you saying that he used a worse template two months later?

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

          From what I can see, he used a fast exponentiation implementation with a smaller constant factor nine months later, rather than switching to a worse implementation two months later. Of course, if he did use a worse template again two months after that, then I would agree that this is indeed suspicious.

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

        Yes, this does not prove anything by itself. However, even the earlier of these two submissions was made in the contest where he became a Grandmaster. I was somewhat surprised that a Grandmaster still did not have a consistent way of writing binary exponentiation, and even used a recursive implementation with a relatively large constant factor...

        • »
          »
          »
          »
          »
          3 weeks ago, hide # ^ |
          Rev. 3  
          Vote: I like it +8 Vote: I do not like it

          If he had always used the recursive version of fast exponentiation before this submission, and then consistently switched to the iterative version afterward, I don't think that would be a big deal. I personally used a recursive implementation of fast exponentiation for quite a long time when I first started doing CP.

          But if he kept switching back and forth between the recursive and iterative versions afterward, without simply copying from an older solution of his, then I think that would be pretty suspicious (So far, though, I haven't found any case like that)

          (sorry for my poor english)

          (By the way, you two kind of seem like the same person)

          • »
            »
            »
            »
            »
            »
            3 weeks ago, hide # ^ |
            Rev. 2  
            Vote: I like it +16 Vote: I do not like it

            Yes, perhaps he really did just switch to a more efficient fast exponentiation implementation in his most recent contest. If that is the case, then I agree with your view. Maybe I am simply overthinking it. Still, there is something about the way his code reads that feels very strange to me, even though I cannot quite put that feeling into words.

            As for the same template appearing twice, I think what happened in Contest 2129 is more suspicious. Compare the Fenwick trees in his solutions B and E.

            331780529

            struct BIT {
                std::vector<int> t;
            
                BIT(int n): t(n + 2) {}
            
                void modify(int i, int x) {
                    for (++i; i < t.size(); i += i & -i) t[i] += x;
                }
            
                int get(int i) {
                    int ans = 0;
                    for (++i; i; i -= i & -i) ans += t[i];
                    return ans;
                }
            
                int get(int l, int r) {
                    return get(r) - get(l - 1);
                }
            };
            

            331855693

            struct B {
                static vector<int> t, z;
                static int c;
                int n;
            
                B(int N = 0) : n(N + 1) {
                }
            
                static void nxt() { ++c; }
            
                void upd(int i, int v) {
                    for (++i; i <= n; i += i & -i) {
                        if (z[i] != c) {
                            z[i] = c;
                            t[i] = 0;
                        }
                        t[i] += v;
                    }
                }
            
                int kth(int k) {
                    int i = 0;
                    for (int b = 1 << 18; b; b >>= 1) {
                        int j = i + b, v = (j <= n && z[j] == c ? t[j] : 0);
                        if (v < k) {
                            k -= v;
                            i = j;
                        }
                    }
                    return i;
                }
            };
            

            Before going any further, I want to clear up a few possible misunderstandings.

            Both pieces of code are Fenwick trees. After reviewing the second implementation, I am confident that the use of static and c there is completely reasonable. It seems that he wanted to avoid constructing a new Fenwick tree for every test case, so this is essentially a kind of lazy-clear mechanism.

            As for why he suddenly used this implementation, my guess is that he thought his solution might TLE, so he tried to reduce the constant factor. In reality, even with this optimization, the solution still TLE'd.

            In other words, the parts that may initially look suspicious are actually perfectly normal. I want to make that clear first.

            What I find strange is something else.

            Why would he change

            void modify(int i, int x)
            

            into

            void upd(int i, int v)
            

            ?

            And why did BIT changed into B here?

            I cannot really explain why the naming of the same algorithmic template would differ between two problems from the exact same contest.

            Of course, this is not particularly convincing evidence on its own. Still, there are many things in his code that I find difficult to make sense of, and they collectively give me a very strange impression.

            Maybe I'm just overthinking it. Maybe plagues just changed the names as he wanted. I just felt that something was strange here.

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

        That's pretty impressive — using a worse template, not even being able to tell which one is better, and somehow improving in rating at the same time. Are you saying he was doing some kind of performance-art weighted training?

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

    In fact, your explanation doesn't really hold up under scrutiny, and you've set a very bad precedent. If people who actually cheat in the future can simply explain everything away with "have fun," then there would be no point in Codeforces existing at all.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it +16 Vote: I do not like it

    Apparently, presumption of innocence on Codeforces is a rating-locked feature. When someone else’s data look unusual, that is “direct evidence.” When an IGM’s code looks unusual, he unlocks formatter settings, time pressure, convenience, and “I was just having fun.” Congratulations: red titles now come with built-in exoneration.

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

Larping final boss:

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

nah I don't think that cheater would post blogs to expose others *remembering about ShulkerBox* oops nvm

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it -8 Vote: I do not like it

    Is this really that hard to understand? He reported everyone above him. Isn't that an obvious conflict of interest? If he himself were a cheater, then of course he would have a personal incentive to report them.

    His accusations are even more ridiculous. Some of them are based on things that are barely related at all, like people submitting at the same time on the last day. Isn't it perfectly normal for people to make a lot of submissions on the final day of a contest?

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

      Don't take this too seriously, this is just a joke

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

        Okay, fine. But the code he writes itself looks like a joke. A lot of people put in an enormous amount of effort and still struggle around difficult rating thresholds, going up and down for a long time, while he somehow went from 2000 to 2600 in what looks almost like a joke.

»
3 weeks ago, hide # |
 
Vote: I like it +36 Vote: I do not like it

Why are so many bot-named users targeting plagues (TemperanceAlouette6042, MatildaDamaris6674 and PiaElka37401).

Note: all of them are unrated and registered 2 days ago (pls don't call me racist).

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it -13 Vote: I do not like it

    Please don't avoid the questions we've raised and attack us in this way instead. Do you really think our responses sound like they were written by a bot?

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

      I'm not saying that your responses were written by a bot. In fact, I think the points you've made are actually very strong.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it -10 Vote: I do not like it

    You're really funny. You're deliberately avoiding plagues, the author of the post, and the user jamesben in the comments. Doesn't he also look very much like the kind of "bot" you're talking about? Why don't you mention that? Please don't apply double standards.

    Please don't dodge the key issues and try to make the discussion about irrelevant side points like this. Bringing up these kinds of distractions is meaningless, and it's really not appropriate.

    • »
      »
      »
      3 weeks ago, hide # ^ |
      Rev. 2  
      Vote: I like it +5 Vote: I do not like it

      I'm just watching the drama, and I noticed that the three of you have usernames following the same formula — Name1 + Name2 + a number — and all three accounts were registered two days ago. Since the three of you are also on the opposite side of plagues, I just thought it was a funny coincidence.

      I'm sorry if my comment came across as offensive. I just found the coincidence funny.

»
3 weeks ago, hide # |
 
Vote: I like it +27 Vote: I do not like it

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

»
3 weeks ago, hide # |
Rev. 6  
Vote: I like it +25 Vote: I do not like it

The only thing that I actually consider a fair question is 2129D.

Here the answer is ridiculously simple: I was just having fun. I just wanted to write funny code.

Right. plagues switched from his usual ++i to i++ because he was “having fun.”

Right. plagues changed the Fenwick tree function name from void modify(int i, int x) in 2129B to void upd(int i, int v) in 2129E because he was “having fun.”

And this is seriously considered an acceptable explanation on Codeforces?

If exactly the same answer had come from someone without an International Grandmaster title next to their name, I strongly doubt people would be nearly as charitable. It would probably have been downvoted into the ground.

Cheaters, are you taking notes? Next time someone points out something suspicious in your code, just say you were “having fun.”

So yes, you did achieve your goal.

Have fun.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it -11 Vote: I do not like it

    You are absolutely right. The fact that I copied a Fenwick tree implementation that supports finding the k-th order statistic clearly proves that I am a cheater, and the analysis of how I write ++ in the copied “AngelBeats” and “BigInt” structures only confirms it further.

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

      I’m not referring to the ++ in BigInt and AngelBeats, but rather to the ++ in the seven for loops in 2129D. I agree that the influence of complete general-purpose templates should be excluded. However, the ++ in 2129D does not fall into that category.

      At least, “having fun” is hardly a convincing reason.

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

        A really “convincing reason” is to take a single submission written in a different style out of more than 100 contests and claim that it somehow proves something just because I happened to write the code a little differently. It is literally laughable.

        Moreover, it is especially ridiculous to accuse me of using an LLM at a time when LLMs were not even capable of solving problems like that.

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

          You only participated in six Codeforces Rounds in 2025 and later. Even if everything you said about the framework issue mentioned at the beginning of the article is completely correct, once the Fenwick-related issue is included, the problems involved happen to be exactly 2129B, 2129D, and 2129E. I think it is reasonable for me to regard your participation in that entire round as somewhat unusual.

          As far as I know, LLMs were already fairly capable in 2025, and some of the stronger thinking models should have been at least around Candidate Master level. Besides, LLMs are not the only means by which someone can cheat.

          Looking purely at the facts, I at least have to consider your participation in Round 2129 to be one of the more unusual cases among those six rounds.

          Since you genuinely believe that “having fun” is enough to explain away the anomalies surrounding your performance on 2129B, 2129D, and 2129E, then so be it. I am not going to try to prove that you are a cheater any more. I simply found your response very suspicious when I saw it.

        • »
          »
          »
          »
          »
          3 weeks ago, hide # ^ |
           
          Vote: I like it +11 Vote: I do not like it

          I do not need to prove that you cheated. I only need to apply your own standard to you. If you believe that would be ridiculous, irresponsible, or insufficiently supported, then you have just written the rebuttal to your own article.

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

Racist bum turns out to be a cheater omd the jokes write themselves

»
3 weeks ago, hide # |
Rev. 2  
Vote: I like it +62 Vote: I do not like it

This is an outrageous stretch. I fully agree the original blog of plagues should've been written without AI, and had removed some accusations, but on this matter, he has my full endorsement.

Most of the stuff here can be explained by copying template code, and a lot of ADHD. This is not how the community should go forward, looking for minor details and asking to defend themselves.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it +16 Vote: I do not like it

    I think it would be very easy for plagues to prove his innocence. He just needs to record both his screen and himself while participating in a Codeforces Div. 1 Round, then upload the footage to show that he genuinely has the skill level in question. Of course, his performance in the contest should not be significantly below what his current rating would suggest. That would definitely be the most convincing way to respond to the accusations.

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

      What performance rating would actually be considered 'not significantly below'?

      • »
        »
        »
        »
        3 weeks ago, hide # ^ |
         
        Vote: I like it -13 Vote: I do not like it

        It’s simple: this can be made perfectly fair. After rated plays that event, his rating should not fall below 2647. If he truly is at that level, then even if he genuinely underperforms in a tournament, it shouldn’t take many more events for him to meet that condition. In the best-case scenario, maybe his rating will even go up in his very next event—who knows?

        I think the best way to respond to accusations is to demonstrate your actual strength, rather than getting trapped in a futile cycle of trying to prove yourself.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it -10 Vote: I do not like it

    This is not far-fetched at all. I don't know what kind of relationship you have with plagues, but if you insist on defending him, then you're setting a very bad precedent for all cheaters. Any cheater could simply use "templates" and ADHD to explain away suspicious behavior and claim that they didn't cheat, even though his supposed template habits don't even match up.

    And honestly, his explanation is pretty funny. It reminds me a lot of this YouTube video I watched recently: https://www.youtube.com/watch?v=JZcJm6Wzz8s

    In fact, none of the friends around me who have looked at this piece of code believe that he didn't use AI: Submission #331847745 — Codeforces

    If you insist on believing otherwise, then yes — "have fun." Apparently, "have fun" can clear you of any accusation.

    Have fun.

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

After reading the blog and the comments, I don't still get whether this is a troll blog or a serious one...

»
3 weeks ago, hide # |
 
Vote: I like it +18 Vote: I do not like it

i seriously want to know why there is so many bot accounts downvoting and attacking plagues?
Even they said focus on the main thing which is the cheating allegations, why could not you guys use your true identity? Or is it that you do not want to or are you also cheating?
Let see if this get downvoted to like -10, that would confirm my suspicions further.

  • »
    »
    3 weeks ago, hide # ^ |
     
    Vote: I like it +8 Vote: I do not like it

    Unrated accounts don't actually change the vote counts, but there's a lot of unrated accounts with the name format WordWord#####. I don't know if there are more accounts with fake contest histories talking here.

  • »
    »
    3 weeks ago, hide # ^ |
    Rev. 4  
    Vote: I like it 0 Vote: I do not like it

    -10. You made me notice something: many of the comments are actually at exactly -10. This suggests that plagues may have ten alt accounts, or that he has successfully deceived a community group that trusts him and is now taking his side regardless of the facts.

    I am not one of the people named in plagues ’s post. I am simply a friend of theirs.

    Also, you really are funny. If my friends used their own accounts to reply to you in this post, guess whether they would also be attacked by all of you. Unlike plagues hey would not be able to simply explain their behavior with “have fun.” Do you understand the difference?

    Or perhaps you already understand it, and your purpose in posting this was to bait other people into coming here so that they could be attacked?

    have fun

    • »
      »
      »
      3 weeks ago, hide # ^ |
       
      Vote: I like it 0 Vote: I do not like it
      1. It is at -10 for most of the new accunt comments, which means that most of the reason why it happen is because you do not use your true account, and has been seen avoiding this question before by telling others to "focus on the main question".
      2. I will take your words here and believe that you are not in plagues post, what is stopping you from using your true account? Given that the source of the downvotes are mostly because you are a new account and is deliberately trying to avoid this question. Now i do agree that there would be people believing for no reason at all and downvoting you but you should also realize that you was not just posting evidence and was also calling him a cheater, which is not really confirmed. And plagues goal was to make a large enough fuss so that the organizer would check themself, not directly calling others a cheater.
        Evidence: Comment
      3. It can also be seen in this comment that you are directing the blame back against him, while you could have just answered better, and not have 90% of your comment accusing plagues.

      Note that i am not plagues supporter, neither do i support your side, just that you trying not using your true account for some reason bugs me a whole lot. And i believe that if you can use your true account and comment instead of these, you will not get downvoted much. You should also have noticed that before this comment was made most of your comments were having positive vote.
      Exta evidence on some of the new account being made by the same person, you can scroll down a bit more to see another evidence: Comment

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

        If you really are not a supporter of plagues, then where were you when plagues was doing the same thing, only much more absurdly—judging whether people had cheated merely because their submission timelines overlapped? You are applying an obvious double standard while claiming that you are not, which is ridiculous. I do not think you have considered the victims’ feelings at all.

        I have not accused plagues here. I am simply responding to him in the same way that he responded to others. When he made those joking replies, did he ever consider how that attitude might hurt other people?

        I will take exactly the same attitude as plagues: I will not admit that this is not my real account. I only just registered it, it is my only account, and I registered and commented here simply to “have fun.” Do you see how dismissive “have fun” sounds now?

        With that same “have fun” attitude, he attacked an entire group of people without considering the consequences. You are doing something similar: you care about plagues ’s feelings but not about the feelings of the other group. Yet you call yourself neither a supporter of plagues nor someone on my side? That is very funny and very “have fun.”

        If you think your position is right, then consider the same logic in the real world. Would the police publicly name one person as a suspect after obtaining solid evidence against that person, or would they publicly name everyone who merely happened to have an opportunity to commit the crime within a particular time window? You are clearly defending the second approach. I do not think I need to explain what would happen if that became acceptable.

        By my standards, using two completely different Fenwick tree implementations in the same contest, together with completely inconsistent coding styles, is already enough for me to conclude that he cheated. This is not an unverified claim.

        If new accounts annoy you, that only shows that you cannot accept honest opinions. Then you will never know what people actually think. Honest advice is often unpleasant to hear, but it is still useful. If this genuinely bothers you so much, perhaps it has directly exposed one of your weaknesses.

        As for why this is a new account, I will give you the same dismissive answer as plagues: it was simply to “have fun,” and it has nothing to do with anyone else. Do you still think that what plagues did was right? I have already explained that evidence: it was merely a coincidence. The probability of those things happening at the same time is the same as the probability of plagues ’s “have fun” explanation being true. This does not constitute direct evidence.

        Finally, have fun.

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

          I have to admit, you are really good at dodging the main thing here:
          My reply to your previous comment was ridiculing you not using your true account, and you basically turned it into me not caring about others's feeling? I care about neither side and was just making an example to where your source of downvote are from.
          I never said i do not care about what new accounts say, i did read your fenwick and binary exp claim and i do somewhat consider that evidence, that is how i know there are atleast 3 of you with lookalike name. And what bugs me is your true intention, if you are not in his post then you should not have been scared of using your main at all, if you are then you are just trying take both down, given that your downvotes mostly come from you using a new accoun. You are making some very bold claim here, i never mentioned anything about plagues righteouness and was only focusing on why you can just use your true account to point things out and that would help your votes a lot. Neither did i do say i am right, even so right about what? What i commented basically mean you are dodging the very question i have been asking you changing the topic — and i just wanted you to use your actual account, is it that hard?

          TL-DR: You have once again directed the question, and now accusing me of taking one or any side despite me not while also not getting what my reply meant. You may or may not reply to this, but if you do please consider reading a bit mroe carefully and not dodge the question this time: "Why are you not using your actual account, given that downvotes come because you are not? And why 3 of them?"

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

            Exactly. Why aren't you using your real account? Is using your real account really that difficult? Why won't you use your own real account?

            You are also very good at changing the subject, and you know perfectly well who brought the discussion onto this topic in the first place. The key issue here should be explaining why plagues has these anomalies in his code, yet you have shifted the discussion toward the alleged alt accounts. You can tell from the way these three accounts speak that they are not the same person. I admit that I am the most hot-tempered one.

            Please stop changing the subject. If you do not have a valid explanation addressing these anomalies in the code, then do not redirect the discussion toward alt accounts, especially when you are using an alt account yourself.

            Furthermore, you have already disrupted the balance of the Codeforces rating system. Although I do not admit that mine is an alt account, it is still unrated and has not affected the Codeforces Elo balance, while your account has. Delete this account and use only your main account.

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

              I know damn well he did, and i already am discussing this with my irl friends.

              And you have once again redirected the question without answering. You must also be shortsighted to not have realized that what defines a "new account" is that you only made this to comment in blogs about plagues accusations and have not done anything else, why mine is not is because it has created because this is my only account and that it has done more than just this?

              And consider why would i have written a (maybe bad) blog here, share my thoughts here, should not i have used my true account to do so?

              And again, i want to know why you are using alt account because this could be for a further purpose. Imagine a chess game where you fall into a checkmate trap by the opponent, that is not exactly fun isnt it

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

              Now, it's me (who have no alt accounts) who ask you: Why don't you use your real account?

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

        Likewise, I also believe that this is an alt account. Within just four months, you somehow immediately learned a bunch of macros, learned how to use segment trees, and started solving problems that are hardly beginner-level. Your coding style already looks quite mature. You also performed extremely well in your first Div. 2 contest, with the plugin giving you a performance rating of 2464. So tell me, and you call this not an alt account?

        Now I will ask you the same question: why are you not using your real account? I will ask you in exactly the same way: “, just that you trying not using your true account for some reason bugs me a whole lot.”

        I do not think you have any right to accuse me while using a new account yourself.

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

          LMAO, you are now accusing me? Alright then, have you heard about other websites? Do you think me just joining 4 months ago mean that i only started 4 months ago?
          Here, this is the account i use for learning cp in the last 2 years on another website. Now that ive switched to learning on YouKnowWho and started solving offline contest to try and get into tst, i spend most of my time on problems all over the places.
          Here is the link to my account account
          Have any question, just ask me

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

At this point it's CF vs some alt accounts