IOI '15 P3 - Teams
View as PDFThere is a class of  students, numbered 
 through 
. Every day the teacher of the class has some projects for the students. Each project has to be completed by a team of students within the same day. The projects may have various difficulty. For each project, the teacher knows the exact size of a team that should work on it.
Different students may prefer different team sizes. More precisely, student  can only be assigned to a team of size between 
 and 
 inclusive. On each day, a student may be assigned to at most one team. Some students might not be assigned to any teams. Each team will work on a single project.
The teacher has already chosen the projects for each of the next  days. For each of these days, determine whether it is possible to assign students to teams so that there is one team working on each project.
Example
Suppose there are  students and 
 days. The students' constraints on team sizes are given in the table below:
| Student | 0 | 1 | 2 | 3 | 
|---|---|---|---|---|
| A | 1 | 2 | 2 | 2 | 
| B | 2 | 3 | 3 | 4 | 
On the first day there are  projects. The required team sizes are 
 and 
. These two teams can be formed by assigning student 0 to a team of size 1 and the remaining three students to a team of size 3.
On the second day there are projects  again, but this time the required team sizes are 
 and 
. In this case it is not possible to form the teams, as there is only one student who can be in a team of size 1.
Task
You are given the description of all students: , 
, and 
, as well as a sequence of 
 questions — one about each day. Each question consists of the number 
 of projects on that day and a sequence 
 of length 
 containing the required team sizes. For each question, your program must return whether it is possible to form all the teams.
You need to implement functions:
void init(int N, int A[], int B[])
- The grader will call this function first and exactly once.
 N: the number of students.A: an array of length:
A[i]is the minimum team size for student.
B: an array of length:
B[i]is the maximum team size for student.
- You may assume that 
for each
.
 
int can(int M, int K[])
- After calling init once, the grader will call this function 
times in a row, once for each day.
 M: the number of projects for this day.K: an array of lengthcontaining the required team size for each of these projects.
- The function should return 
1if it is possible to form all the required teams and0otherwise. - You may assume that 
, and that for each
we have
. Note that the sum of all
may exceed
.
 
Subtasks
Let us denote by  the sum of values of 
 in all calls to 
can(M, K).
| subtask | points | Additional Constraints | ||
|---|---|---|---|---|
| 1 | 21 | none | ||
| 2 | 13 | none | ||
| 3 | 43 | |||
| 4 | 23 | 
Comments
This comment is hidden due to too much negative feedback. Show it anyway.
Read the line under the Subtasks header.
ah thanks, ctrl F wasnt returning anything useful.
Was there 2s time limit during the original IOI contest? It seems pretty tight and this problem has a higher TL on other OJs (Yandex: 8s, wcipeg.com: 5s; my TLE solution passes with 1.5s on wcipeg.com, so it can't be just due to a slower testing machine). If that's not the original TL, I think it should be increased, at least to 3s.
I don't remember what the time limit was on the official IOI, though we left it at 2s here because there was an AC solution. I've increased the TL to 3s to reflect the other AC solution's max time being 1.5s, and have rejudged all previous submissions.
This comment is hidden due to too much negative feedback. Show it anyway.