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

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

Hello codeforces,

Today is the first time someone has come to my DMs asking to help them cheat. I am happy they see me as a good programmer, but sad that they want to cheat. To teach them a lesson and discourage others from cheating, I decided to make this blog exposing them. (And you also get to see me trolling them)

At first, I wanted them to give me their CF password so that I could submit WA and then make a ton of wrong hacks, making their rating go down a lot. Maybe even make a blog on their account exposing them. Sadly, that didn't go well, so I just did some trolling. Also, I would like to warn you that some people might screenshot the DMs in an attempt to frame you. So message someone about you trolling a cheater before you do it. (I sent a message to my friend straight away)

Messages

I did not manage to get who they are, but you can see their discord. Their discord ID is 913137636120596530.

Lastly, I will give my own opinion on cheating. Firstly, I think it is pointless. Like, you will get the rating, but that is not your real rating. You will know that, and will not feel any satisfaction from someone else reaching a good rank in codeforces, as you will always know you are not that good. And other people do not care about your rating. Like, if you do programming with someone, your true rating will come to light.

And for those who are angry that cheaters are making your ratings worse, I do understand you. However, remember that your performance depends on you only. The performance of others does not matter, as you want to improve yourself. (But yes, I do get wanting to get higher rating, or to beat a friend, makes it more interesting)

  • Проголосовать: нравится
  • +248
  • Проголосовать: не нравится

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

"to beat a friend, makes it more interesting" — This is the most satisfying thing ^_____^

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

    most intelligent grey

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

      It seems people will make accusations. I purposely avoided making any as I don't have evidence. I encourage others to not make potentially slanderous accusations without proper evidence.

  • »
    »
    6 месяцев назад, # ^ |
    Rev. 2   Проголосовать: нравится -20 Проголосовать: не нравится
    anyone explain why we use inline in code 
    #include<bits/stdc++.h>
    #define L(i, j, k) for(int i = (j); i <= (k); ++i)
    #define R(i, j, k) for(int i = (j); i >= (k); --i)
    #define ll long long
    #define sz(a) ((int) (a).size())
    #define vi vector < int >
    #define me(a, x) memset(a, x, sizeof(a))
    #define ull unsigned long long
    #define ld __float128
    #define pb emplace_back
    using namespace std;
    const int mod = 1e9 + 7;
    struct mint {
    	int x;
    	inline mint(int o = 0) { x = o; }
    	inline mint & operator = (int o) { return x = o, *this; }
    	inline mint & operator += (mint o) { return (x += o.x) >= mod && (x -= mod), *this; }
    	inline mint & operator -= (mint o) { return (x -= o.x) < 0 && (x += mod), *this; }
    	inline mint & operator *= (mint o) { return x = (ll) x * o.x % mod, *this; }
    	inline mint & operator ^= (int b) {
    		mint w = *this;
    		mint ret(1);
    		for(; b; b >>= 1, w *= w) if(b & 1) ret *= w;
    		return x = ret.x, *this;
    	}
    	inline mint & operator /= (mint o) { return *this *= (o ^= (mod &mdash; 2)); }
    	friend inline mint operator + (mint a, mint b) { return a += b; }
    	friend inline mint operator &mdash; (mint a, mint b) { return a -= b; }
    	friend inline mint operator * (mint a, mint b) { return a *= b; }
    	friend inline mint operator / (mint a, mint b) { return a /= b; }
    	friend inline mint operator ^ (mint a, int b) { return a ^= b; }
    };
    inline mint qpow(mint x, int y = mod &mdash; 2) { return x ^ y; }
    const int N = 127;
    mint fac[N], ifac[N], inv[N];
    void init(int x) {
    	fac[0] = ifac[0] = inv[1] = 1;
    	L(i, 2, x) inv[i] = (mod &mdash; mod / i) * inv[mod % i];
    	L(i, 1, x) fac[i] = fac[i &mdash; 1] * i, ifac[i] = ifac[i &mdash; 1] * inv[i];
    }
    inline mint sgn(int x) {
    	return (x & 1) ? mod &mdash; 1 : 1;
    }
    int n;
    int c[N];
    mint dp[N][N][N];
    string S;
    mint iC[N][N], C[N][N];
    mint cur[N][N][N];
    mint suf[N][13][N][N];
    mint gs[N], v1[N], v2[N];
    mint hap[N][N];
    mint f[N], nf[N];
    void Main() {
    	cin >> n;
    	L(i, 1, n) {
    		cin >> c[i];
    	}
    	cin >> S;
    	int emp = 0;
    	L(i, 1, n) {
    		if(S[i &mdash; 1] == '0') {
    			++emp;
    		}
    	}
    	if(!emp) {
    		cout << 1 << '\n';
    		return;
    	}
    	if(*max_element(c + 1, c + n + 1) == 1) {
    		cout << 0 << '\n';
    		return;
    	}
    	L(i, 1, n + 1) L(k, 0, i &mdash; 1) suf[i][0][k][0] = 1;
    	R(i, n, 1) {
    		int pick = c[i];
    		L(j, 0, i &mdash; 1) {
    			if(pick > j + n &mdash; i + 1) continue;
    			if(!pick) {
    				dp[i][j][0] += 1;
    				continue;
    			}
    			L(k, 0, j + 1) gs[k] = v1[k] = v2[k] = 0;
    			L(rs, 0, min(pick, 12)) {
    				int ls = pick &mdash; rs;
    				mint prob = C[j + 1][ls] / C[j + n &mdash; i + 1][pick];
    				if(!prob.x)continue;
    				int e = j + 1 &mdash; ls;
    				L(d, 0, e) gs[ls + d] += suf[i + 1][rs][e][d] * prob;
    			}
    			L(k, 0, j + 1) v1[k] += gs[k] * (1 &mdash; hap[j + 1][k]);
    			L(k, 1, j + 1) v2[k &mdash; 1] += gs[k] * hap[j + 1][k];
    			mint mul = 1 / (1 &mdash; v2[0]); // ?
    			v2[0] = 0;
    			L(k, 1, j) if(v2[k].x) {
    				int emp = j &mdash; k;
    				L(l, 0, emp) v1[l + k] += v2[k] * dp[i][emp][l];
    			}
    			L(k, 0, j) dp[i][j][k] += v1[k] * mul;
    		}
    		L(j, 1, min(12, n &mdash; i + 1)) {
    			L(k, 0, i &mdash; 1) {
    				L(l, 0, k) gs[l] = suf[i + 1][j &mdash; 1][k][l];
    				L(l, 0, k + 1) {
    					suf[i][j][k][l] += suf[i + 1][j][k + 1][l] * (1 &mdash; hap[k + 1][l]);
    					if(l) gs[l &mdash; 1] += suf[i + 1][j][k + 1][l] * hap[k + 1][l];
    				} 
    				L(l, 0, k) if(gs[l].x) {
    					int emp = k &mdash; l;
    					L(s, 0, emp) suf[i][j][k][l + s] += gs[l] * dp[i][emp][s];
    				} 
    			}
    		}
    	}
    	// R(i, n, 1) {
    	// 	L(j, 0, i &mdash; 1) {
    	// 		cout << i << ' ' << j << " : ";
    	// 		L(k, 0, j) {
    	// 			cout << dp[i][j][k].x << ' ';
    	// 		}
    	// 		cout << endl;
    	// 	}
    	// 	cout << endl;
    	// }
    	// L(i, 0, 4) {
    	// 	cout << suf[4][1][3][i].x << ' ';
    	// }
    	// cout << endl;
    	me(f, 0);
    	f[0] = 1;
    	R(i, n, 1) {
    		if(S[i &mdash; 1] == '1') {
    			me(nf, 0);
    			L(j, 0, emp) 
    				L(k, 0, emp &mdash; j) 
    					nf[j + k] += f[j] * dp[i][emp &mdash; j][k];
    			swap(f, nf);
    		} else {
    			me(nf, 0);
    			L(j, 0, emp) nf[j] = f[j] * (1 &mdash; hap[emp][j]);
    			L(j, 0, emp &mdash; 1) { 
    				mint mul = hap[emp][j + 1] * f[j + 1];
    				L(k, 0, emp &mdash; j &mdash; 1) 
    					nf[j + k] += mul * dp[i][emp &mdash; j &mdash; 1][k];
    			}
    			swap(f, nf);
    			--emp;
    		}
    	}
    	cout << (1 &mdash; f[0]).x << '\n';
    	L(i, 0, n + 1) L(j, 0, n + 1) L(k, 0, j + 1) dp[i][j][k] = 0;
    	L(i, 0, n + 1) L(j, 0, 12) L(k, 0, n + 1) L(l, 0, n + 1) suf[i][j][k][l] = 0;
    }
    int main() {
    	ios :: sync_with_stdio(false);
    	cin.tie(0); cout.tie(0);
    	init(123);
    	L(i, 0, 123) C[i][0] = 1;
    	L(i, 1, 123) L(j, 1, i) C[i][j] = C[i &mdash; 1][j] + C[i &mdash; 1][j &mdash; 1];
    	L(i, 0, 123) L(j, 0, i) iC[i][j] = 1 / C[i][j];
    	L(i, 0, 123) L(j, 1, i) hap[i][j] = C[i &mdash; 1][j &mdash; 1] / C[i][j];
    	int t; cin >> t; while(t--) Main();
    	return 0;
    }
    
    /*
    1
    3
    0 1 2
    010
    
    1
    4
    0 1 1 2
    0100
    
    
    1
    3
    0 1 1
    010
    */
    
    • »
      »
      »
      6 месяцев назад, # ^ |
      Rev. 2   Проголосовать: нравится -21 Проголосовать: не нравится
      The use of the inline keyword in C++ code provides potential performance benefits by suggesting to the compiler that it should attempt to expand the function code at each call site rather than using the usual function call mechanism. This can reduce function call overhead and increase performance, especially for small, frequently called functions. However, the actual inlining is up to the compiler's discretion, and it might ignore the inline suggestion if it deems inlining inappropriate.
      
      In the provided code, the inline keyword is used extensively in the mint struct's member functions and friends:
      
      cpp
      Copy code
      struct mint {
          int x;
          inline mint(int o = 0) { x = o; }
          inline mint & operator = (int o) { return x = o, *this; }
          inline mint & operator += (mint o) { return (x += o.x) >= mod && (x -= mod), *this; }
          inline mint & operator -= (mint o) { return (x -= o.x) < 0 && (x += mod), *this; }
          inline mint & operator *= (mint o) { return x = (ll) x * o.x % mod, *this; }
          inline mint & operator ^= (int b) {
              mint w = *this;
              mint ret(1);
              for(; b; b >>= 1, w *= w) if(b & 1) ret *= w;
              return x = ret.x, *this;
          }
          inline mint & operator /= (mint o) { return *this *= (o ^= (mod - 2)); }
          friend inline mint operator + (mint a, mint b) { return a += b; }
          friend inline mint operator - (mint a, mint b) { return a -= b; }
          friend inline mint operator * (mint a, mint b) { return a *= b; }
          friend inline mint operator / (mint a, mint b) { return a /= b; }
          friend inline mint operator ^ (mint a, int b) { return a ^= b; }
      };
      Here's why inline is used in these contexts:
      
      Performance Optimization:
      
      The mint struct functions are relatively small and frequently called. Inlining these functions can eliminate the overhead associated with function calls (such as saving registers and stack management).
      Encapsulation of Operations:
      
      The mint struct encapsulates arithmetic operations with modular arithmetic. Inlining these operations ensures that the complex logic is efficiently incorporated directly at the point of use.
      Compiler Hints:
      
      While modern compilers are very good at optimizing code and may inline functions even without the inline keyword if they deem it beneficial, using inline explicitly serves as a hint to the compiler that these functions are good candidates for inlining.
      However, it's essential to use inline judiciously:
      
      Code Bloat: Excessive inlining can lead to code bloat, where the executable size increases significantly due to many copies of the inlined functions.
      Compiler Discretion: The inline keyword is a request, not a command. The compiler may choose to ignore it if inlining is not advantageous.
      In summary, the use of inline in this code aims to optimize performance by reducing the overhead of function calls for small, frequently used functions, particularly in the context of the modular arithmetic operations encapsulated in the mint struct.
      
»
6 месяцев назад, # |
Rev. 2   Проголосовать: нравится +18 Проголосовать: не нравится

if he is not lying about he's rating, then most probably he's account is funnylmao123, because there are only 13 1880 rated accounts on codeforces and it's the most suspicious one. I checked the contests of this account and most of A's was solved too late and it's the sign of that the person sends him ac code and he "modifys" it and it takes time, only a few time A was solved fast and these problems were too easy it means maybe he solved it in his own.

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

    It seems people will make accusations. I purposely avoided making any as I don't have evidence. I encourage others to not make potentially slanderous accusations without proper evidence.

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

      when I was writing this comment I was also like I have no proofs, but commented because it's so suspicious that expert can't ac div3A in 10 minutes. Anyways, you are right.

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

        For real. Look at this. Dude solved Div2-D in 2 minutes, took less time than Div2-A.

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

      However, remember that your performance depends on you only. The performance of others does not matter, as you want to improve yourself. That is so true, yes, but that thing probably bothers me the most. The issue is that with heavy cheating it will be almost impossible to keep the track of whether you've improved or not. How many people do you think cheat per contest? Well, official information states that it's something about 100. However we have aslo confirmed information that there are cheating groups with thousands of participants. Do you really think that only a hundred out of these people would cheat? We've come to the point that possibly there might be thousands of cheaters participating in contets as well. With such heavy cheating the inflation of both problem ratings and your average perfomance is just inevitable. So at some point you will find yourself to be able to solve only 1500 rated problems while in the past you could easily solve 1700 rated. And it's not because you've become dumber, it's because your efoorts are nothing compared to the effort of thousands. Personally, I've noticed a lot of people across the cf who've unjustly escaped plagiasm check and these guys were able to cheat up to 2200 rated problems. I really don't care about the rating, but that's my main issue with cheaters.

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

    i am telling the reason why they cheat..they have no self respect.. they think through cheating they can shortlisted through cf rating..but that's absoulutely wrong they might be. but thats harmful for them because through the level of cf rating level interviewer will be asked que lmao.. tit for that situation will be happen !! are u agree with me

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

However, remember that your performance depends on you only. The performance of others does not matter, as you want to improve yourself.
That is so true, yes, but that thing probably bothers me the most. The issue is that with heavy cheating it will be almost impossible to keep the track of whether you've improved or not. How many people do you think cheat per contest? Well, official information states that it's something about 100. However we have aslo confirmed information that there are cheating groups with thousands of participants. Do you really think that only a hundred out of these people would cheat? We've come to the point that possibly there might be thousands of cheaters participating in contets as well. With such heavy cheating the inflation of both problem ratings and your average perfomance is just inevitable. So at some point you will find yourself to be able to solve only 1500 rated problems while in the past you could easily solve 1700 rated. And it's not because you've become dumber, it's because your efoorts are nothing compared to the effort of thousands. Personally, I've noticed a lot of people across the cf who've unjustly escaped plagiasm check and these guys were able to cheat up to 2200 rated problems. I really don't care about the rating, but that's my main issue with cheaters.

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

    I used to find my performance fluctuating a lot back when I was Mid-Expert; I guess there's some sort of a cheater distribution, with most lying below CM. At least — after around 1800-ish I haven't felt that slight difference in performance is throwing me off the ranks too much (because of — say, some imaginary cheater wall, where most cheaters lie, skewing ranks).
    It was basically a a motivator for me — to jump beyond that, get to stable CM. 😐 Have been lacking the same motivation for Master somehow.

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

Bro's dangerous!!! :)

btw,if someone climbed rating by paying =>they gave less no of contests,and its easy to see from graphs of people if they feel genuine or not ig

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

Dude actually requested MOD as a price xd, great blog btw

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

In the last contest EDU 166, it's pretty evident that tons of people have cheated in C, anyone can easily identify that by just looking at the code, these people have destroyed every platform wherever they go, whether it be Codechef or LeetCode. Codeforces need to develop some kind off mechanism to check otherwise it's going the same way as of LC & CC.

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

    Cheating exists not because the cheaters are too smart but because admins of codeforces are not active enough. If you go to telegram, and search "codeforces solutions" or "cp solutions", there you will find multiple such groups with thousands of members. Since, codeforces itself is sponsored by telegram, why can't they ask telegram to keep actively deleting those groups ?

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

Cheating exists not because the cheaters are too smart but because admins of codeforces are not active enough. If you go to telegram, and search "codeforces solutions" or "cp solutions", there you will find multiple such groups with thousands of members. Since, codeforces itself is sponsored by telegram, why can't they ask telegram to keep actively deleting those groups ?

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

    most intelligent grey

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

    Deleting each and every telegram group doesn't sound like a good solution, cheaters will actively create new groups and/or use other sites to communicate, or just conceal the fact that a group is used for cheating.

  • »
    »
    6 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    1. they used to be sponsored by telegram, they no longer are
    2. its wasted effort to chase behind such people. they ll shift to some other platform, then you won't be able to do anything
»
6 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Goodness man, it makes me sad to see that even experts are cheating (although it could entirely be possible that he got to expert because of cheating anyway)

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

Bro I have one genuine question for you.

Why did you not take his offer? Is it you becoz you worked hard to become a master and didn't want to spoil the game or for newbies like us? Even if you were gonna help him there is no way for him to ever be higher rated than u until unless he hires someone better.

For community — If people can reach candidate master and master with cheating than what's the point of anything. It's not like there were not enough talented people on codeforces to make normies like me despair but people can probably reach GM and talent/hard work etc won't even matter.

But in the end just we play the game coz we are addicted to it, there's nothing I can do now but be tormented.

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

    If people can reach candidate master and master with cheating than what's the point of anything.

    Sure, it is probably demotivating to know that cheaters are reaching high ranks without putting in the hard work themselves. But reaching CM/M is not going to benefit these people at all.

    Reaching a rank feels amazing when you do it through your own efforts, but doing it through cheating is basically pointless. Nobody hires based on CF rating, and people respect others not necessarily for their rank, but more for what they contribute to the community for others or for their results in official competitions where it's pretty much impossible to cheat.

    While I agree that cheating negatively impacts people who 'play' by the rules, and sometimes (or perhaps more than sometimes) they may not be caught and take prize money, why not twist it into a source of motivation for you? It will feel even better when you overtake them because they didn't work hard and you did.

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

      it'll, it's a bonus point in interviews for small companies

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

    Firstly, that wouldn't be helping anyone.

    I shouldn't even need to add to that, but I will. I am simply against it, as I said in my blog, you are only fooling yourself. And obviously, I do not want to be associated with such a thing. I am a CP enjoyer, CF Master, IOI medalist, problem setter myself, and probably a member of the Serbian committee from next year. I am not going to give all of that up over some small amount of money.

    Even when I help people with upsolving problems, I also do not like to give solutions. I prefer to give just hints, as most fun comes from figuring out the problem and enjoying the process of going from reading to AC. Without it, AC doesn't feel special.

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

      I am a CP enjoyer, CF Master, IOI medalist, problem setter myself, and probably a member of the Serbian committee from next year

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

Bruv, the "just give me your codeforces password" part was smart, it would've been over for them.

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

wtf is this comment spam??

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

I think people cheat so that they can show it in their resume that they have such and such rating and title on codeforces. But even that is not very effective as truth will be out when the company interviews you on your coding skills.

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

It's crazy how he might not be the only one doing this bs. They are taking so much away from people who give an honest contest and do it to the best of their abilities. I hope Karma get's their asses.

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

bro thats easy money why did you reject it

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

    It could be that the cheater is actually out to "expose" high-rated users who sell out easily. OP made the right call here.

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

maybe you should have talked to him a bit more to find out who has the cheater face

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

Good job! Trolling cheaters is funny :)

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

could have been this guy: https://codeforces.me/profile/piotr.kukla but he not solved a problem for a year.