L1-049 天梯赛座位分配 (20分)
#include <bits/stdc++.h>
#define int ll
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const int maxn=3e5+10;
int f[105],m[105];
void solve() {
int n,sum=0,num=0,dui=0;
cin>>n;
for (int i = 0; i <n; ++i)
cin>>m[i],m[i]*=10,sum+=m[i];
vector<int > a[105];
memset(f, 0, sizeof(f));
for (int i = 1;;) {
int t=0;
while(t<n) {
if(a[t].size()<m[t]){
num++;
a[t].push_back(i);
if (dui+1==n) i+=2;
else i++;
}
if (f[t]==0&&a[t].size()>=m[t]) f[t]=1,dui++;
t++;
}
if (num==sum) break;
}
for (int i = 0; i < n; ++i) {
cout<<"#"<<i+1<<"\n";
for (int j = 0; j < a[i].size(); ++j)
cout<<(j%10!=0?" ":"")<<a[i][j]<<(j%10==9?"\n":"");
cout<<(a[i].size()%10!=0?"\n":"");
}
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
while (_--) {
solve();
}
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-10719.html