User nkvuong is cheating at vietnamese online judge ( vn.spoj.pl/8)
He submitted many solutions on the web (he also change variable names, function names, and many things else to make it more difficult for admins and problem setters to know that), output data for test cases that he could not solve, and even add difficult problems in vietnamese online judge to spoj to collect solutions and submit them:
vn.spoj.pl/problems/QBFLOWER/58 (he just submitted blue mary's solution)
vn.spoj.pl/problems/MILITARY/14
vn.spoj.pl/problems/GCDSUM/5
vn.spoj.pl/problems/SCIRCLE/4
vn.spoj.pl/problems/PALINX/3
vn.spoj.pl/problems/BOSS/4
It's easy to see that right after someone get accept on spoj, he submit in vietnamese online judge (this explain why he rejudged problem GCDEX to make solutions that he can't use get TLE (the problem GCDSUM in vietnamese online judge has really strict time limit so he couldn't use many accepted code in spoj)) and why he was willing to give test cases of problem VCIRCLES on spoj (he deleted his comment under the problem when he got accepted in vietnamese online judge)
Can spoj admins do anything about this?
Here are some of nkvuong's interesting code to prove what I said. There are many more cheating code (sorry, I don't know how to post code)
submission 2081178
var n:integer;
f:array[1..4000] of string;
begin
f[1157]:='59310955574174378025143';
f[1158]:='608738499757149308420461';
f[1159]:='624772964943249389853921';
f[1160]:='641222772712946666232159';
f[1161]:='658098503325620557703531';
f[1162]:='675411002095367948226792';
f[1163]:='693171385921368804266503';
f[1164]:='71139149976492178207743';
f[1165]:='730081674557913935063085';
f[1166]:='749255232103605934739479';
f[1167]:='768923994378646785063103';
f[1168]:='789100539835396883939357';
f[1169]:='809797761151675117596505';
f[1170]:='831028872951171360193205';
f[1171]:='85280741971042867086399';
f[1172]:='875147283856825592496127';
f[1173]:='898062694062109480753151';
f[1174]:='921568233736104125879807';
f[1175]:='945678849725365687304481';
f[1176]:='97040986122163883222045';
f[1177]:='995776968885089512945407';
f[1178]:='1021796264187423103783033';
f[1179]:='104848423898007434502441';
f[1180]:='1075857795292827120414039';
f[1181]:='1103934255368313170878195';
f[1182]:='1132731371937969551486879';
f[1183]:='1162267338745180573579677';
f[1184]:='1192560801321446407655743';
f[1185]:='1223630868021565282662399';
f[1186]:='125549712132395373058651';
f[1187]:='1288179629402366802651719';
f[1188]:='1321698957975444222097689';
f[1189]:='1356076182440620738701165';
f[1190]:='1391332900299137403659864';
f[1191]:='1427491243879009512858099';
f[1192]:='1464573893362984956103679';
f[1193]:='150260490128684565788671';
f[1194]:='1541605650408283495393521';
f[1195]:='1581602979275263415146495';
f[1196]:='162262184965939854852515';
f[1197]:='1664685593543647485026457';
f[1198]:='1707822763913648832465553';
f[1199]:='1752059503197018682676295';
f[1200]:='1797423382471947368620319';
readln(n);
writeln(f[n]);
end.
He did this many times to find informations about input data
submission 2169477
include
include
using namespace std;
int ________, zzzzzzzzzzzzzzzzzz;
struct bxyz134 {
short r, s;
bxyz134() {}
bxyz134( int rr, int ss ) { r = rr; s = ss; }
int z_z_z_z() { return r >= 0 && r < ________ && s >= 0 && s < zzzzzzzzzzzzzzzzzz; }
friend bxyz134 operator + ( const bxyz134 &a, const bxyz134 &b ) {
return bxyz134( a.r + b.r, a.s + b.s );
}
};
bxyz134 zz__zzz1, zz__zzz2;
char z_z[1500][1500];
char z_z_z_z_z[1500][1500];
char __zz[1500][1501];
queue zz__zzz_to__zz__zz__, zz__zzz__z___zz___zz__zz__;
queue zz___to__zz__zz__, zz____z___zz___zz__zz__;
int main() {
scanf( "%d%d", &________, &zzzzzzzzzzzzzzzzzz );
int num = 0;
for( int r = 0; r < ________; ++r ) {
scanf( "%s", __zz[r] );
for( int s = 0; s < zzzzzzzzzzzzzzzzzz; ++s ) {
if( __zz[r][s] == 'L' ) {
if( ++num == 1 ) zz__zzz1 = bxyz134( r, s );
else zz__zzz2 = bxyz134( r, s );
__zz[r][s] = '.';
}
if( zz[r][s] == '.' ) { z_z_z_z_z[r][s] = 1; zz____z___zz___zzzz__.push( bxyz134( r, s ) ); }
}
}
const bxyz134 zz___zzz[4] = { bxyz134( -1, 0 ), bxyz134( 0, 1 ), bxyz134( 1, 0 ), bxyz134( 0, -1 ) };
zz__zzz__z___zz___zz__zz__.push( zz__zzz1 );
z_z[zz__zzz1.r][zz__zzz1.s] = 1;
int zzzz__;
for( zzzz__ = 0; !z_z[zz__zzz2.r][zz__zzz2.s]; ++zzzz__ ) {
for( ; !zz__zzz__z___zz___zz__zz__.empty(); zz__zzz__z___zz___zz__zz__.pop() ) zz__zzz_to__zz__zz__.push( zz__zzz__z___zz___zz__zz__.front() );
for( ; !zz____z___zz___zz__zz__.empty(); zz____z___zz___zz__zz__.pop() ) zz___to__zz__zz__.push( zz____z___zz___zz__zz__.front() );
for( ; !zz___to__zz__zz__.empty(); zz___to__zz__zz__.pop() ) {
bxyz134 a = zz___to__zz__zz__.front();
__zz[a.r][a.s] = '.';
for( int d = 0; d < 4; ++d ) {
bxyz134 b = a+zz___zzz[d];
if( !b.z_z_z_z() || z_z_z_z_z[b.r][b.s] ) continue;
z_z_z_z_z[b.r][b.s] = 1;
zz____z___zz___zz__zz__.push( b );
}
}
for( ; !zz__zzz_to__zz__zz__.empty(); zz__zzz_to__zz__zz__.pop() ) {
bxyz134 a = zz__zzz_to__zz__zz__.front();
for( int d = 0; d < 4; ++d ) {
bxyz134 b = a+zz___zzz[d];
if( !b.z_z_z_z() || z_z[b.r][b.s] ) continue;
z_z[b.r][b.s] = 1;
if( __zz[b.r][b.s] == '.' ) zz__zzz_to__zz__zz__.push( b );
if( __zz[b.r][b.s] == 'X' ) zz__zzz__z___zz___zz__zz__.push( b );
}
}
}
printf( "%d\n", zzzz__-1 );
return 0;
}
He changed variable names into something unimagineable after I reported what he's been doing to VOJ admins (and he still denied what he's been doing until now). But it is still easy to see that this is still Croatian code that can easily be found on hsin.hr/15
Last month he was able to get to rank 1 of vietnamese online judge for about two or three days. I think SPOJ admins should do something about this.
-_-
Today I've found that user "suby" did the same thing as posted above. He has been rank #2 at SPOJ for a very long time.
Here are some interesting code:
Problem ANALYSER. submission id 1326682:
This code looks pretty nice, but when I pull the scroll bar to the right:
The same things can be found in these submissions too:
Problem RP. id: 1344111
Problem LARGE. id: 1602571
Problem BACKUP. id: 930772
These are not only things he even does. After submitting cheating program and has been rejected by my own test cases on problem BACKUP, he submits my classmate g201513's program. At that time, the password of my classmates' account @ SPOJ only has 6 digits and is easy to decrypt by brute-force. Maybe this is the reason why suby gets almost all g201513's program @ SPOJ.
See these submissions on my problems:
Problem Code submission id Original Author submission id
BACKUP 1260794 g201513 855371
BARB 1207079 g201513 836398
DRAGON 1260732 lcosvse 836529
DRAGON2 1260277 lcosvse 1003477
GEN2 1300074 g201513 1003443
GSS2 1301723 g201513 858682
MINDIST 1248964 g201513 1116322
PROFIT 1207304 g201513 1207070
SEQ2 1325178 g201513 836309
Only to my hard problems, he submitted so many cheating programs, one can image that many of his submissions is cheating ones.
Obviously, suby can not finish these problems himself. These actions are cheeky.
By the way, user ---(login: neophd) has been banned a long time ago. But his name is still shown on the ranklist. So would the admins please kick out these two persons from the ranklist? Thanks.
Well, cheating needs to defined too.
Many people cannot solve the spoj problems, they ask hint/solution in spoj/topcoder forums. Then they submit the solution and get accepted. Is this cheating ?
I however, like to solve problems myself. So i rarely ask hint but when I get stuck ( too much wa/tle ), i see my friend's code who have solved the problem, then change my program accordingly. Is this cheating ?
I once downloaded a solution from IPSC and submitted it in the spoj system. But I know how the solution works, is this considered cheating ?
I think the only person who losses is the cheater himself. But obvious cheaters like suby/neophd should be handled strictly.
Well, I think a tool for problem setters to remove submissions to their problems they judge not legal would be really useful. Cheating has been growing recently and I, as a SpojBR admin, have found several judge solutions to problems, most of the cheaters have been talked to and convinced not to cheat again but a tool to quick delete illegal submissions would be really appreciated.
It would probably require some kind of control though, maybe a form telling the reason of the code's removal.
Wondering about his AC solution for problem DDT (https://www.spoj.pl/ranks/DTT/8) I looked at the submissions of user gmsr (https://www.spoj.pl/users/gmsr9) and was wondering even more: It seems very obvious that (s)he has been cheating ...
....
161115593562260183597018076262500259385225118963936327496691227156776984827584194180',
'637841185472509493966277041641953081675754238090104091048544721209706145413312768740',
'2525330407789119221009341756704875466226455554887350891090156651320061065513932186440',
'9998943371381242321023474793439574481139884832189105555262377011307809353994353116580',
'39593131470570019928884900188787576804513637926117934749025519709205419589642069387800',
'156788800623457278918384204747598804145874006187427021606141058048453461574982594775688',
'620925183926009621146978506218967449531342090729015621989883130549504437230725772687824'
....
Source : spoj.pl/status/MCIRGAME,numerix/12
This kind of solution is call cheating or not? It is almost the same with TEXT solution.
I dont understand why some people who can solve only 10,20.. easy problems but like to blame other people cheating. Why they do not use their time to study some algorithms or do some harder exercises?
For me, I only take care about how many problems I can solve, I dont take ecare about others.
But I am wonder why you can assume he is cheating? Because of his high AC rate ? Could you explain it for me?
our idea is to leave the decision to the problem-setter: if some subms are illegal - he can ban only selected submissions,
is it ok?
vdmedragon, from the fragment of numerix's solution that you posted it looks as if he precomputed all possible values locally and pasted a large array that contains the solution to every possible input case. His program simply looks up the solution from the array and prints it. Of course, I may be mistaken (after all, I cannot see all the code).
IMHO this is not the same as a TEXT solution. The user does not know, and is not using, the judge output. Granted that this is not the solution that the problem setter intended, but it is also not using someone else's code, neither is it making use of judge output.
If the problem setter wants to stop solutions like this, it is up to the problem setter to choose the constraints in such a way that makes such solutions infeasible, or simply set a much smaller source limit. Otherwise, if it is the user's own code/solution and it meets all requirements specified in the problem statement, I see no reason why this should be called cheating.
If you are not satisfied with the situation, you can simply resolve this by changing the problem so that these solutions no longer work.
EDIT:
Don't get me wrong. I am not criticizing the problem or the the problem setter. Just pointing out that calling numerix a cheater is not fair, and that you can put restrictions if you don't like this kind of solutions to this problem.
I can't understand that!
According to MCIRGAME, I spent hours to analyze and at least found out, how to construct a sequence that solves the problem.
Then I checked the restrictions of the problem and decided to precompute to get a good runtime. I can't see any kind of cheating here.
And: If you look at my link to the user I named before you can see, that he submitted some TEXT solutions. So he must have known the solution to the problem. How can he know that without any kind of cheating?
Yes, you are right: I only solved about 50 problems, and mostly not so difficult ones.
And: Yes, I should spend time in learning more about algorithms.