27 / 315
Mar 2009

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.

thanks!

it looks he was cheating,

he is temporarily banned (no access to SPOJ system), after we carefoully look into it, we decide what to do.

As I can see he is no longer on the sphere online judge ranking, and his user page at spoj is empty. Was his submission deleted?
But his user page at vietnamese online judge is NOT empty. Does this mean he can still access to vietnamese online judge?

And the most important is that his rank at VOJ system hasn't been eliminated yet. (his rank is now 3, but several weeks ago he got the first rank for about 3 days.)
There've been so many complaints about this annoying user and I think you should execute a strict and clear judgement. smile

14 days later

-_-
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:


smiley
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. smile

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 ? confused

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 ? confused
I think the only person who losses is the cheater himself. wink But obvious cheaters like suby/neophd should be handled strictly.

I think, discussing algorithm is necessary. But a user like suby, who only gets Accepted by print the answer downloaded from the web, will spoil this OJ. His actions - hiding cheating code, or obfuscating code like the user nkvuong - are even shamefulness.

Solutions to some problems are also available online, although they are not official judge solutions. Often AC code is posted in various forums and on some people's blogs. I think those submissions should also count as cheating if the exact same code is submitted.

14 days later

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.

thanks andrehp!

we will provide some useful tools for problem/contest-setters soon!

....
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?

@vdmedragon,

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.

Agreed, there is nothing wrong with a precomputed solution, if that's what that was.

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.

I just want to distinguish the difference between TEXT solution and other type of precomputed solution. Sometime they are very similar.

But in all the circumstance, I dont take care about cheating or not, submitting TEXT solution or precomputed solution or not (to get some points???) - but I have seen some people complained about other who submitted existing solution (not TEXT solution) -(which existed a lot in internet).

For me, may be it was good for them because we have different level of official/unofficial training. We can see a lot of coder here who can solve only very easy problems because the lack of knowledge/experiences, so the source code may be useful for them. Even us, sometime we need to verify the solution work or not, and how well they work so we submit it.

The one thing I want is that after having some solution, they can adapt it to other problem, so it will be really useful for them. For example, I cant understand and solve some segment,interval tree or BIT problems if I havent had a pascal solution and some document described these data structures (in vietnamese). But I know there are a lot of coder here who dont have any source code/documents about it. So I am right if I blame them when they submit some existing source code for their purpose of study.

I graduated from university 6 years ago and I just started to code about 1 years when we have a judge online in Vietnamese. So i think I can understand the difficulty other people have (lack of documents/training/dont know how to find a solution for a problem) ... but because of others experiences/advantages I have so I dont need to post a lot of question in forum to obtain the assistance.