Well, a lot of people seem to be having the same kind of questions across different forums and different problems. Here is a brief list of questions that have been coming up quite frequently over the past few weeks, and some hints on what you should do to solve the issue.
Q. What compilers do we use?
A. The compilers for the different languages are specified when you select the language while submitting the solution. Code compiled on other non-standard compilers cannot be guaranteed to compile on the online judge system.
Q. What are the system specifications?
A. As of now, the specifications of the system on which the judge executes the solutions are :
Operating System : Gentoo Linux
Processor : Quad Core Intel running at 2.33 GHz
Memory : 4 GB of RAM (64 MB guaranteed for each submission)
Storage : 160 GB effective storage using SATA RAID 0 configuration
Network Link : 144 Mbit maximum throughput
Q. I can’t seem to find the compilers being used by Codechef. Can you give me a link?
A. The IDEs / Compilers / Interpreters for some commonly used languages are listed below.
C / C++ : You can use the Dev C++ IDE if you are on windows – http://www.bloodshed.net/dev/devcpp.html
Java : Download the Java Development Kit from the Sun website – http://java.sun.com/javase/downloads/index.jsp
Python : Download the python interpreter from – http://www.python.org/download/
Perl : Download perl from http://www.perl.com/download.csp
Ruby : Download it from http://www.ruby-lang.org/en/downloads/
C# : Download it from http://www.microsoft.com/express/vcsharp/
You can use flags like -O2 in C or C++ to turn on compiler level optimization.
Q. Why does my code compile fine in Turbo C but not on the Codechef Judge?
A. The Codechef Judge uses the GNU compiler collection. Turbo C uses some non-standard headers and as such should not be used. A standards compliant C code written under Turbo C will compile fine on the online judge.
Q. Can I include the file conio.h?
A. No, conio.h is not a standard header file and as such is not available under the GNU compiler collection. Code which includes conio.h will not compile on the online judge.
Q. What should I name the class in a java solution?
A. You should name the class as Main. Failure to do so will result in a compilation error on the online judge system.
Q. Do I need to take the input for all testcases at once before processing it?
A. No, you need not take all the input at once. You can take the input for a particular test case and output the answer and then proceed to the next test case. Program should read from standard input and write into standard output. There is no need to read all data first, compute them all and then print all output. It is recommended to read and write data as simultaneously. Technically, server redirects standard stream to files. You can test you programs in the same way at home.
Q. Can I get the input for which my program failed?
A. Currently it is not possible to get the input for which your program fails. Thinking out corner cases is a part of the fun associated with algorithms 🙂
Q. How do I take input for problems which do not specify a distinct terminating condition or the number of test cases?
A. In cases where the total number of test cases are not specified or some input doesn’t serve as the terminating input, you are expected to take input till an EOF marker is encountered. While testing, you can terminate the input in the command line by pressing the <ctrl> and <z> keys together.
Q. How do I get the execution time of a program in Linux?
A. After compiling the program, say you have the output file with the name ‘solution’, then, you can get the execution time by using the command “time ./solution”. The sys and user times are what you should be looking at in the output.
Q. The code runs within the time limit on my system, but I get a TLE on Codechef. Why is that so?
A. TLE stands for Time Limit Exceeded. The configuration of your system might be different from the one we use. You need to optimize your algorithm or come up with a better algorithm.
Q. I can’t even take input or print output within the time limit, let alone processing the input. What should I do?
A. Make sure you have submitted an efficient solution to http://www.codechef.com/problems/INTEST/ and http://www.codechef.com/problems/TEST/ and make sure you read http://blog.codechef.com/2009/02/24/54/
Q. The time limit for the problem is 2 seconds, but some accepted solutions take more time. How is that possible?
A. This can happen if the problem has multiple test case files. The time mentioned in the constraints is per input file. If there are multiple input files, then the total time taken for executing all of them is displayed. For example, if the time constraint for the problem is 2 seconds and there are 8 input files, then your program must take at most 2 seconds for any particular input file, but the total time displayed will be the sum of the execution times for the 8 input files and this may exceed 2 seconds.
Q. Why do I get an error called SIGSEGV?
A. A SIGSEGV is an error(signal) caused by an invalid memory reference or a segmentation fault. You are probably trying to access an array element out of bounds or trying to use too much memory. Some of the other causes of a segmentation fault are : Using uninitialized pointers, dereference of NULL pointers, accessing memory that the program doesn’t own.
Q. Why do I get an error called SIGABRT?
A. A SIGABRT is caused if your program aborted due to a fatal error. This can also be caused if you are using an assert() which fails or an abort().
Q. Why do I get an error called SIGFPE?
A. A SIGFPE is caused by a floating point error. Your program is encountering such an error, probably a division by zero or some similar undefined operation.
Q. Why do I get an error called NZEC?
A. NZEC stands for Non Zero Exit Code. Usually, returning non-zero values from main() will cause this error. It helps telling crash from WA (Wrong Answer) with interpreted languages. Typically this would happen if you omit a return 0; from main() in C. For interpreted languages or Java/C++, this could happen if your program threw an exception which was not caught (e.g. Trying to allocate too much memory in a vector).
If you have any other questions, do post them as a comment and we will try to incorporate them into the FAQ.