#P1075. University Entrance Examination
University Entrance Examination
描述
在伊朗的高中毕业生中,存在着激烈的竞争,他们都想通过全国统一的大学入学考试。科学、研究与技术部设立了教育评估组织(EEO)来负责这场大型考试的各个方面。今年,教育评估组织从140万名参加了一场时长4.5小时的艰难的选择题考试的高中毕业生中,选拔出了约15万名学生进入大学。在这场一年一度的考试之前,通常会有一项价值数十亿里亚尔的业务,为热情的学生提供备考课程。在大考日过后的几周,每位考生都会收到一张成绩单,以及一份学科-院系-大学(FDU)清单,清单上列出了大学各院系的每个学科(例如,设拉子科技大学计算机工程系的软件工程学科)以及当年该学科的招生名额。符合条件的考生(那些分数足够高,可以填报FDU优先志愿的考生)会填写一份优先志愿表,按照他们的偏好顺序填报他们想进入的FDU。教育评估组织会处理这些表格,并综合考虑总分、考生的FDU优先志愿列表以及一些其他选拔规则,将被录取的考生的名字列入每个FDU的录取名单中,直到所有名额都满为止。那些未被列入任何名单的考生被视为落榜,可能会在明年再次尝试。每位被录取的考生的名字只能被列入一个名单中。
其中一个有趣的选拔规则是鼓励考生进入他们家乡附近的大学。这是为了帮助减少对大学宿舍住宿的申请数量。
选拔过程非常复杂,并且对很多人来说都非常敏感,因此教育评估组织决定聘请伊朗最优秀的程序员来设计一种新的选拔算法,并为他们多年来一直在做的事情编写一个全新的程序。ACM编程竞赛是可以找到这些程序员的地方。
有N名学生S1到SN,以及M个项目F1到FM,每个项目代表一个FDU。同时还有一些地理区域。对于每位考生,其总分、获得高中文凭的地理区域以及他/她想要的FDU优先志愿列表都是已知的。对于每个FDU,相应大学所在的地理区域以及当年的招生名额都有记录。
编写一个程序,根据上述输入数据列表,计算出被录取学生的名单以及他们能够进入的FDU。你的程序必须遵守以下规则:
-
(本地学生选拔规则)假设两名学生A和B都在他们的优先志愿列表中选择了F,且F位于区域R。同时假设A的分数高于B的分数。那么,如果B来自区域R(本地)而A来自其他区域(非本地),并且B的分数高于A分数的70%,那么在进入F时,B比A有优先权。在所有其他情况下,A在进入F时比B有优先权。
-
(公平规则)学生应根据他们的FDU优先志愿列表来对待。也就是说,一名被录取的学生将被其能够进入的第一个FDU录取。
注意:我们假设分数都是不同的整数值。
输入
输入的第一行包含一个整数t(1 <= t <= 10),即测试用例的数量,随后是每个测试用例的输入数据。每个测试用例的第一行包含N(1 <= N <= 150)和M(1 <= M <= 50),接着是N行,每行对应一名学生。这些行的格式依次为Ri, Mi, K, Fi1, …, FiK。在这一行中,对于学生i,Ri是他/她所在的区域编号,Mi是他/她在入学考试中的分数,K是他/她的优先志愿列表中FDU的数量(0 <= K <= M),以及他/她按兴趣顺序排列的FDU编号的优先志愿列表。然后有M行,每行对应一个FDU。每行依次包含Ri和Ci,它们分别是Fi(第i个FDU)的区域编号以及Fi的招生名额。注意,区域编号是任意整数。
输出
不同测试用例的输出之间恰好由一个空行分隔。对于每个测试用例,你应该输出N行,每行对应N名学生中的一名。如果学生i被FDU Fj录取,那么第i行应该包含j,如果该学生没有被其感兴趣的任何FDU录取,则应输出“not accepted”。
输入数据 1
1
9 2
1 100 2 1 2
2 80 2 2 1
1 90 1 1
2 40 1 2
2 50 1 1
1 60 1 2
2 75 1 1
1 95 1 1
2 30 1 2
1 3
2 4
输出数据 1
1
2
1
2
not accepted
2
not accepted
1
2
来源
德黑兰2001