思路:
这题目属于光看测试数据被吓死的,一开始以为很难,然后就一直没做,然后静下心来之后,发现只是输出看着多了点而已
用一个struct套一个队列
整个学校的队伍人数先看成一个整体这样比较好操作(我一开始是又分小组的,然后搞来搞去麻烦很多,看成一个整体的话,只要在输出的时候十个十个输出就行)
依次往学校的空位上放人就行,因为要判断最后剩下的是否只有一个学校,所以需要一个tot变量(所有学校还没被安排座位的队员)来辅助判断
#include#include using namespace std; int n,tot,a[1111]; int maxx=-0x3f3f3f3f; struct QUEUE { int head,tail,data[11111]; void init() { head=0,tail=0; } int size() { return tail-head; } int front() { return data[head]; } int back() { return data[tail-1]; } void pop() { head++; } void push(const int &x) { data[tail]=x; tail++; } }; struct SCHOOL { int num; QUEUE st; }s[111]; int main() { cin>>n; for(int i=1;i<=n;i++) { int x; cin>>x; maxx=max(x,maxx); a[i]=x; s[i].num=10*x; tot+=s[i].num; } int j=1; while(tot) { for(int i=1;i<=n;i++) { if(s[i].num) { tot--; s[i].num--; if(tot==s[i].num) { s[i].st.push(j); j+=2; } else { s[i].st.push(j); j++; } } } } for(int i=1;i<=n;i++) { cout<<"#"<



