ProCo Information
Team Registration
This year's competition will be in-person at the Stanford campus. We will be hosting a maximum of 300 participants. Thus, slots to participate are awarded on a first come first serve basis.
Date: May 4, 2024
Time: 9 AM
Location: Sapp Center for Science Teaching and Learning
Deadline to sign up: Wednesday, May 1
Once you submit your registration form, we will send out a confirmation email saying if you were accepted or not to participate.
Teams can have between one and three students. Students on a team do not need to be in the same grade, or have the same level of programming experience.
If we reach our participation cap, any remaining teams will be placed on a wait list, and they will be notified as soon as possible if spots become available. Once you submit your registration form, you will not be allowed to replace team members, only drop them if they are unable to attend.
Schedule
9 AM: Check-in
9:30 AM: Opening ceremony
9:45 AM: Practice contest
10:00 AM: Contest start
12:30 PM: Contest end
12:45 PM: Closing ceremony
Divisions
There are two different divisions in the competition: Novice and Advanced. A team may compete in the Novice division only if all members have less than two years of programming experience. If a team member has competed in ProCo or some equivalent contest before, they should compete in the Advanced division. Teams with participants who are at the Silver or higher level of USACO, should compete in the Advanced division.
If eligible for either division, teams may choose to compete in the Advanced division. One incentive for doing so is better prizes.
The ProCo staff has the right to disqualify any team that does not follow these rules of division assignment. If you are unsure what division to compete in, please reach out to the ProCo staff at proco2024staff@gmail.com and nchi1@stanford.edu.
Laptops and Equipment
Each team member will be responsible for using their own computer and WiFi to compete in the contest. Communication among team members can be facilitated in any fashion.
Prizes
Boba will be awarded to all participants.
Rules
Access and Communication
- Each team is allowed to use up to three laptops with Internet access.
- The use of the internet is allowed to access free resources. Sentient help is strictly prohibited.
- External communication is prohibited.
- The only programs allowed are IDE, editors, web browsers, and programming tools. The use of all other programs are prohibited.
Input and Output
- All input will be received from console input (System.in in Java, cin in C++, stdin in C, sys.stdin in Python 3).
- All output should be sent to console output (System.out in Java, cout in C++, stdout in C, sys.stdout in Python 3).
- Each program will specify its own output format. Format all output as closely as possible to the specifications. This includes spacing, capitalization, and punctuation. See below for examples for input and output.
- Java
import java.io.*; import java.util.*; import java.lang.*; //class name must be the TASK name of the problem class addtwonums { public static void main(String[] args) throws java.lang.Exception { //make an input reader called input //input.readLine() reads in the next line of input BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); //a StringTokenizer st can parse space-separated input in a line (input.readLine()) StringTokenizer st = new StringTokenizer(input.readLine()) ; //st.nextToken() gets the next space-separated part of input //Integer.parseInt(st.nextToken()) interprets token as an integer int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); System.out.println(a + b); } }
- C++
#include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; //read in input from stdin cout << a + b << "\n"; //prints a + b to stdout return 0; }
- C
#include <stdio.h> int main(void) { int a, b; scanf("%d %d", &a, &b); //read in input from stdin printf("%d\n", a + b); //prints a + b to stdout return 0; }
- Python 3
a, b = [int (x) for x in input().split()] print(a + b)
- Java
Submissions
- We will be accepting submissions in C, C++, Java, and Python 3.6.
- Solutions will be graded using GNU C++11, Java 1.8.0, and Python 3.6 on Linux machines.
- All files must be named in the format specified on your problem statement. File extensions must be the following:
- C: problem.c
- C++: problem.cc or problem.cpp
- Java: problem.java
- Python: problem.py
- Java submissions must follow these rules:
- Name of the main class should be the task name.
- All classes should be in one file.
- Don't include a package statement.
- Avoid using scanner for efficiency.
- You will be submitting your (single) code file to us using a web interface. If you are using Java and want to create multiple classes, put all of the class declarations into one file.
Contest Format
ProCo will consist of 9 - 15 unweighted problems and will last for 3 hours.
Submissions will be run on a set of test cases which are not revealed to the teams during the contest, and they are accepted as correct if they pass on all of the test cases. Teams will be notified whether their submission is correct within about a minute. If the submission is correct, no further points can be awarded for the problem. If the submission is not accepted, teams are free to resubmit the problem. There is no limit on the number of submissions per problem.
The submissions from a team do not all need to be in the same language. For example, the same team could solve novA in C, novD in Java, and novF in C++.
Contest Platform
This year, ProCo will be using Codeforces to host the contest. Unlike last year, some preparation will be required from participants. Participants must create a Codeforces account before filling out the registration form, and include their username in the form.
Each team must also create a team ID on Codeforces: https://docs.google.com/document/d/1PbllTUWEOEI-9VDyD4hfH2BEaMDCvvi5y1PYiHd2oME/edit. Each team member will need to submit this team ID and team name when filling out the registration form.
Scoring
Teams are ranked according to the most problems solved. Teams who solve the same number of problems will be ranked in accordance with ICPC style penalty points. The team with the lowest number of penalty points wins the tiebreaker. The rules for assigning penalty points are below:
- For every minute it takes to solve a problem, 1 penalty point is given upon successful completion of that problem. For example, if a team solves problem C at minute 11, they will receive 11 penalty points. If the same team then solves problem F at minute 35, they will receive 35 penalty points for that problem, and have a cumulative penalty of 46 points. Thus, their score is 2 problems, and 46 penalty points.
- Furthermore, for every incorrect submission, 20 penalty points are assigned. However, these points are only tabulated upon successful completion of this problem. Thus, if a team submits to a problem 5 times, but never solves that problem, their total penalty points will not increase. However, if a team submitted 5 times incorrectly, and then solved the problem on the 6th attempt, they would receive 5 * 20 = 100 additional penalty points for incorrect submissions in addition to the time it took for them to solve it.
Past Contests
Past contest results and problems can be found here.
External Resources
In order to prepare for ProCo, you may want to familiarize yourself with problems from similar contests. At the following sites you can find repositories of problems of varying styles and difficulty. Most of these problems are for training purposes and will be harder than the problems given. Recommended links (similar format or similar difficulty level) are listed first.
- USACO Algorithmic training and practice
- CodeForces Online programming competition
- TopCoder Online programming competition
- Google CodeJam More programming practice
- PKU Algorithmic problem set database
- UVA More algorithmic training
- Project Euler Math-oriented programming problems