Tutorial for problem-setters

This is tutorial for those who want to add new problems to SPOJ problemsets. It will get you through a little complex procedure of adding the problems.


Who is a problem-setter?

It's a person who adds new problems.

How to become a problem-setter?

If you are interested in helping us build our problem base, or if you would like to organize a contest of your own, please fill out the form (if you are a newcomer to the site, or have solved fewer than 20 problems, a little additional information about yourself is welcome but by no means obligatory). You will receive a reply with detailed instructions.

Please note that we reserve the right to correct, recategorise, modify or remove problems which are available for solving in one of main problemsets. This does not concern problems added specifically for use in private contests which are not visible in the archives of the online judge.

How to begin

You can start here (problem list → My own problems)
There you can view all problems you have already added. To create a new problem click on Add problem link at the top of the page.

Problem page

As mentioned before, to add a new problem click (of course first you should log in) on problem list link on the left side of the page and then click the Add problem link at the top of the page. To edit existing problem go to its page and click on the Edit problem link at the top of the page.

Adding a problem

Here is the screen shot with some sample data:

new problem

Meaning of the fields
(when you add or edit a problem, move pointer over green question marks to see the hints):

Problem code

Unique problem code, consists of 3 up to 8 capital letters.

Problem name

Just a problem name that will be displayed in the NAME column in the problem list.


Group of people related to this problem.
The group must exist (you can create new one clicking "add group" menu position).
You should use this option if you want to grant access to your problems for the other co-authors.

Source code limit

Source code size limit of solutions sent by users, measured in bytes.


Origin of the problem (for example link).

Assessment type

Type of the problem:

  • Binary - "accepted" or "wrong answer".
  • Maximize score - higher score means better solution.
  • Minimize score - lower score means better solution.


How the problem is judged:

  • Pyramid (PIII733) - automatically.
  • Manual - manually by problem setter.

Placement in main problem set

Choose in which section your problem should appear.
If you are going to test your problem, it's incomplete or has no English version,
check none option - problem will be available only for you.


Check this option if you want to allow submitting solutions to this problem.

Available for use in 3rd party contests

Is it possible to use your problem in other contests?

Dynamic content

This option is deprecated.

Master judge

Source code of high level judge - used for multiple test cases and for single data set as well.
You can write your own judge, if you need it.
Default judge (1000. Generic masterjudge) accepts solution only if all test cases are accepted.
If you want the score to be percentage of accepted test cases, choose judge no. 1001.

Available languages

Mark languages in which users can upload solutions.

Include new languages

If this option is enabled, all languages added in the future will be automatically available for this problem.

Merge all languages in ranklist

If this option is disabled participant will appear in problem's score table as many times as he changes programming language. In other case he'll appear only once.

Continue editing after saving changes

If you check this option and click Modify, problem description (modified version) will appear in new window.


Create the problem.


Check how the problem page will look like.

After you fill all required fields, click Create button and the problem will be created. Then go back to problem's page, click on the Edit problem link and continue setting problem with new options now available.

Adding non-english problem

First, you have to set Placement in main problemset to none so that your problem won't be visible in the main problemset (i.e. in the main contest that is accessible to everyone and can be viewed right after entering www.spoj.com). This is enough for you to use your problem in your own private contest (how to set up your own contest? - answers can be found in this tutorial).

If you want to allow other problem setters to use your problem in their contests, check the Available for use in 3rd party contests option. On the other hand, if you want your problem to appear in some contest (either private or public - www.spoj.com, br.spoj.com, pl.spoj.com, vn.spoj.com ...), contact with the contest setter.

Editing an existing problem

Example screen shot: (with DOUGHNUT problem data).

new problem

Meaning of the fields:

Problem test sequence

Define here which test cases use to judge solution (you can upload test cases below in

Test data upload section).

Test data upload

Here you can add, modify or delete test cases and choose judges for them. Usually one

data set suffices but if you wish you can add more.

Add/modify testcase

Choose whether you want to add new test case or to modify or delete existing one.

Input and output text files are uploaded from the specified file on your computer. The provided file may be zipped or gzipped; if so, make sure it has the correct extension (.gz and .zip respectively). The size of the uploaded file may not exceed 1MB.

Input file

Choose input data (if the problem has no input data you can leave this field empty).

Output file

Choose output file (if the problem has many correct answers you can leave this field empty

and use your own judge).

Test case judge

Add your own judge or choose between predetermined judges:

  • Ignores extra whitespaces - the standard judge for binary problems, i.e. problems of ACM-type: Accepted or Wrong Answer. Output generated by submitted program should be the same as test case output file (except whitespaces).

  • Ignores FP rounding UP tp 10-2 - the standard judge for binary problems, i.e. problems of ACM-type: Accepted or Wrong Answer. Use this judge for numerical problems. Output generated by submitted program should be the same as test case output (with accuracy 0.01).

  • Ignores FP rounding UP tp 10-6 - the standard judge for binary problems, i.e. problems of ACM-type: Accepted or Wrong Answer. Use this judge for numerical problems. Output generated by submitted program should be exactly the same as test case output (with accuracy 0.000001).

  • Score is source length - score for the solution equals to length of source code (only if test case was accepted).

Rejudge submission range

All submissions within specified range will be rejudged. Use this feature only in case of invalid data set, your own invalid judge, etc.

Remember: rejudging many solutions may take a lot of time - better check your test cases twice and try to avoid rejudging solutions.

Why my problem is not visible for other users? (Editorial board issue)

In case of any problems with data sets, wrong problem statements, etc., Editorial Board Members are allowed to hide the problem; after that the problem-setter will see the problem for his own purposes only - the problem will be invisible for others, and only EB Members can show it again.

Communicating with users solving your problem

To communicate with users post comments under the problem. You can use comments to publish information about test cases changes, reason of the re-judgment, etc. Please also check for new comments from users from time to time and answer their questions - comments are the main way of communication between users and problem-setters.


For more information, help, hints, ideas and suggestions please visit our forum. FAQ is also situated in the forum.

For now there is no comprehensive tutorial about judges but it will appear soon. You can find some useful information about writing judges here: https://www.spoj.com/forum/viewtopic.php?t=3388

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.