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.
Content:
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 send an e-mail to this address: contact@spoj.pl (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:

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.
Co-authors
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.
Resource
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.
Checker
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.
Testable
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
Create the problem.
Preview
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.pl). 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.pl, br.spoj.pl,
pl.spoj.pl, vn.spoj.pl ...), contact with the contest
setter.
Editing an existing problem
Example screen shot:
(with DOUGHNUT problem data).

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.
Notice:
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.
More...
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.pl/forum/viewtopic.php?t=3388