Hong Kong Olympiad in Informatics

Frequently Asked Questions

Please note that the following policies, rules and regulations are subject to change without prior notice. All other information are comments and should not be taken as absolute facts. If in doubt, please contact us to confirm.

  1. I have a question! Who do I ask?

    First, you should check whether your question is answered in this FAQ. If not, you can either ask in our newsgroup at news://news.hkoi.org, or you can send an email to our email address . You may also browse our website to see whether relevant information is available.

  2. What should I do to prepare for HKOI?

    There is no short answer. Read everything here, in this website, and try to do some of our past papers to get a feel of what HKOI requires. Be prepared.

  3. Will knowledge of flash/web design/linux/networking/etc be useful for HKOI?

    In general, the more you know about computers, the better. But keep in mind that the main scope of HKOI is on programming, problem solving, and data structures and algorithms.

  4. What will be the format of the heats/finals event?

    For the heat event, the format will be that of a written paper. The paper will probably contain both multiple choice questions and fill in the blanks questions. You will not be asked to write long programs in the heat paper. For more details, see the past paper section of the reference materials.

    For the final event, you will be given 4-5 programming tasks, and you will be required to write solutions (complete, compilable programs) on a computer and hand them in a soft-copy format. The exact method of submitting solutions may vary, please consult the instructions on the finals page for details, or you may ask on our newsgroup. The finals papers for previous years are also in the past paper section.

  5. Will my results in the heats event be counted towards my final result?

    No. Only the results of the finals event is counted towards medals. Of course you will need to "pass" the heats in order to be eligible to enter the finals event. The main reason why HKOI holds a heats event is because we have hundreds of participants every year, and there are not enough computers for that many people in a single competition venue. The objective of the written paper of the heats event is to select participants with potential ability to do well in the finals event.

  6. Do I need to know the ___ algorithm to get a good result?

    For Junior Group, we expect contestants to have a good command of the language of choice (Pascal/C/C++), familiarity with basic loops, strings, arrays, input/output, and other basic language features. We also expect a good sense of mathematics and problem solving skills. Knowledge of basic algorithms such as sorting (bubble sort, insertion sort), searching (linear and binary search), basic data structure such as queues, stacks, etc, and basic techniques such as enumeration and counting will also be useful. Of course, knowledge of other advanced algorithms will be a definite advantage.

    For Senior Group, in addition to the requirements for Junior Group, contestants are expected to have an understanding of exhaustive and optimization techniques, basic graph theory, recursion, and other advanced programming techniques. (We may also require certain discrete mathematics topics covered A. Maths). However, topics such as dynamic programming, advanced graph theory, advanced depth first search, breadth first search, various heuristics searches, advanced data structures such as heaps, hashes, etc. will not be required (although knowledge of such will be an advantage), as they will be covered in our training sessions. The programming tasks of the Senior Group paper is usually more demanding than that of the Junior group.

    Don't worry if you have never heard of the names of the algorithms above. Many of our trainees (and trainers also!) had never heard of the algorithms above when they first participated in HKOI, and did well nevertheless with their problem solving skills and general programming techniques. There are usually many ways to get some score in a finals task, and usually the aim of the task is not just to test for knowledge in particular algorithms, but whether contestants are able to "solve" a given problem, even though the solution by the participant may not be a perfect solution. Many times, a partial solution using simple algorithms is more effective than blindly applying "advanced algorithms" because the former is usually easier to write and less complex. Remember that we are not concerned with the method you use to solve a given task, but whether the solution works (see the question on scoring/judging). A "full" solution that uses the correct idea but wrong in implementation is worth zero score, but a partial solution that works in some select cases may get a score. If you want to get a feel of the questions, refer to the final papers of recent years. If you have difficulties, you may always ask at our newsgroup.

  7. How are problems judged in the finals event?

    Unlike most other programming assignments / exams that you may have taken before, we are not concerned with how you write your program. In fact, for the purposes of judging your program, we do not even look into your program at all. Instead, we run your program through several (normally 10-20) "test cases".

    For each test case, some input is given to your program, and the output of your program is compared to the correct output. Remember that the output of your program must exactly correspond to the format specified in the task description, otherwise you will receive zero score for that task. In particular, please note that this applies to whitespace and line breaks as well. (Please also see the open problem for the finals event)

    Of course, you will receive some score for each test case that your program successfully passes. If your program passes all test cases, you will get a full score. Similarly, if your program passes some cases but not all, you will get a partial score depending on how many test cases passed. If you program does not pass any test case, you will get a zero score.

    There usually will be (at least) a few test cases that tests whether your program runs correctly in boundary cases, or on large data sets. Sometimes boundary cases may require special handling. If you want to get a high score in a task, make sure you cater for these cases as well.

  8. If you understood the judging process that we have outlined above, you might have already noticed that you do not have to spend excessive time writing comments, or making the source code "beautiful". Our advice is to use shorter variable names, less comments (most people get away with writing no comments at all), and anything that would save you time in typing the code, unless you feel those measures are neccessary for you to understand your program or to debug possible errors.

  9. What will happen if I get a medal in HKOI?

    In that case, congratulations! You get a certificate for your result, and a medal or trophy during the prize presentation ceremony. More importantly, you will be invited to join the HKOI training team and participate in our training activities. You will also be eligible to participate in the team formation tests (see below) which will select Hong Kong delegates to external competitions.

  10. Do I have to participate in all training sessions? Will attendance be taken?

    Attendance to training sessions is not compulsary for HKOI training team members. We believe that our members have the ability to make informed and rational choices on whether or not to come. We provide the trainings not only to train potential Hong Kong delegates, but also in the hope that our trainings will be inspiring and interesting to those who choose to attend. Most trainees attend our trainings not because they are "obligated" to do so, but instead because they find our trainings useful, informative, and fun.

    And don't forget that although the attendance is not compulsary, the topics covered are highly relevant to our selection tests and the external competitions (eg. NOI/IOI). If you do aim to participate in these competitions, it is strongly recommended that you attend our trainings as often as possible.

    As for attendance, it may or may not be taken, but it would only serve as a reference rather than a selection criterion for external competitions, etc.

  11. What is the IOI? NOI?

    The International Olympiad in Informatics (IOI) is the "ultimate" programming competition for secondary school students. It is held annually, usually in the 3rd quartile of the year. Participating countries all over the world will each send a maximum of four delegates to the competition. The event will be hosted in a different country every year. You can find more information in the IOI Secretariat, http://olympiads.win.tue.nl/ioi/

    The National Olympiad in Informatics (NOI) is the national equivalent competition. It has a competition format almost identical to that of the IOI. Provinces, major cities and regions (eg. Hong Kong, Macau etc) may send a delegation team. Starting from NOI2006, the maximum delegation size is five competitors, including one compulsary female member. The event is held in different cities each year, including in Hong Kong for NOI 1997. You can find more information in http://www.noi.cn

  12. How can I participate in external competitions such as the IOI?

    We hold Team Formation Tests (TFT) to select delegates to NOI, IOI and other competitions. The TFT will have a format similar to that of the respective competition. All HKOI training team members are eligible to participate in the TFT. Usually the result of the TFT is conclusive to the team selection, and we would consider other aspects of the candidates (eg. HKOI results, participation, etc) only if there is a tie in score. The precise format of the TFT and selection process may vary from year to year, and the date of the TFT usually depends on when the competitions are held for that year.