![rooms.jpg](https://img-blog.csdnimg.cn/img_convert/867bc78ed3524ed17d59e809219e2ffa.jpeg)
天梯赛使用 OMS 监考系统,需要将参赛队员安排到系统中的虚拟赛场里,并为每个赛场分配一位监考老师。每位监考老师需要联系自己赛场内队员对应的教练们,以便发放比赛账号。为了尽可能减少教练和监考的沟通负担,我们要求赛场的安排满足以下条件:
每位监考老师负责的赛场里,队员人数不得超过赛场规定容量 C;每位教练需要联系的监考人数尽可能少 —— 这里假设每所参赛学校只有一位负责联系的教练,且每个赛场的监考老师都不相同。
为此我们设计了多轮次排座算法,按照尚未安排赛场的队员人数从大到小的顺序,每一轮对当前未安排的人数最多的学校进行处理。记当前待处理的学校未安排人数为 n:
如果 n≥C,则新开一个赛场,将 C 位队员安排进去。剩下的人继续按人数规模排队,等待下一轮处理;如果 n>c;
for(int i=1;i>s>>x;
q.push({s,x});
arr[i]=s;
}
while(q.size()){
string name=q.top().name;
int num=q.top().num;
q.pop();
if(num>=c){
cnt++;
mp[name]++;
if(num-c>0)
q.push({name,num-c});
}
else{
int k=0;
for(int i=0;i=num){
v[i]+=num;
mp[name]++;
k=1;
break;
}
}
if(!k){
v.push_back(num);
mp[name]++;
}
}
}
for(int i=1;i |