一道稍微有点绕的模拟题,看了本站上其他同志的博客,感觉还是在下的比较简单直观
#include<iostream>
#include<vector>
using namespace std;
int A[105];
vector<int> ans[105];
int main() {
int N;
cin >> N;
int sum = 0;
for (int i = 0; i < N; i++) {
cin >> A[i];
A[i] *= 10; //每个学校可以容纳的人数
sum += A[i]; //整体可以容纳的人数
}
int num = 0;
int tag = -1; //标记上一位选手的学校
for (int i = 0; i < sum; i++) { //对每个选手的编号进行分配
for (int j = 0; j < N; j++) { //每个学校依次分配一个编号
if (A[j]>0) { //A[j]==0表示此学校的所有选手编号已分配
if (tag != j) num++; //学校不同,那就依次
else num += 2; //学校相同,那就隔一位入座
ans[j].push_back(num);
tag=j;
A[j]--;
}
}
}
for (int i = 0; i < N; i++) {
cout << "#" << i + 1 << endl;
for (int j = 0; j < ans[i].size(); j++) {
cout << ans[i][j];
if (j % 10 == 9) cout << endl;
else cout << " ";
}
}
return 0;
}