There 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 length containing the required team size for each of these projects.- The function should return
1
if it is possible to form all the required teams and0
otherwise. - 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
Size?
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.