L1-1 天梯赛座位分配 (20 分)
C++
#include<bits/stdc++.h>
using namespace std;
const int maxn=110;
int a[maxn];//记录每个学校的队员数
int f[maxn];//标记每个学校是否就坐完毕
vector<int>v[maxn];//存每个学校依次获得的座号
int main()
{
int n;scanf("%d",&n);
int sum=0;
for(int i=1;i<=n;++i)
{
int x;scanf("%d",&x);
a[i]=x*10;
sum+=a[i];
}
memset(f,0,sizeof(f));
int stu=0,sch=0;//已遍历的学生数、学校数
int i=1;
while(1)
{
int x=1;//学校编号,进行循环
while(x<=n)
{
if(v[x].size()<a[x])
{
stu++;
v[x].push_back(i);
if(sch+1==n)i+=2;
else i++;
}
if(!f[x] && v[x].size()>=a[x])//该校全部坐好
{
f[x]=1;
sch++;
}
x++;
}
if(sch==n)break;//所有学校都坐好
}
for(int i=1;i<=n;++i)
{
printf("#%d\n",i);
for(int j=0;j<v[i].size();++j)
((j+1)%10==0)?printf("%d\n",v[i][j]):printf("%d ",v[i][j]);
}
}