一二三四五 上山打老虎

天梯赛L1-049 天梯赛座位分配 (20 分)

链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805081289900032

思路:首先理解清楚题意:给队员分座位,保证同一个学校的队员不挨着,如果前一个座位的同学是自己学校的,那么隔一个去坐(意思等同于文中,最后剩下一个学校隔位就坐)
每个学校通过一个vector保存座位号,每个座位标记是哪个学校的来判断是不是满足隔位就坐。

代码:

#include<bits/stdc++.h>


using namespace std;
vector<int>ve[105];
int a[105],bo[(int)1e5+5];
int main (){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    int  ans=1,x=n;
    while(x){
        x=0;
        for(int i=1;i<=n;i++){
            if(ve[i].size()<a[i]*10){
                if(bo[ans-1]==i){
                    ans++;
                }
                ve[i].push_back(ans);
                bo[ans]=i;
                ans++;
                x++;
            }
        }
    }
    //cout<<ans;
    for(int i=1;i<=n;i++){
        cout<<"#"<<i<<endl;
        for(int j=0;j<ve[i].size();j++){
            cout<<ve[i][j];
             if((j%10)<9)cout<<" ";
            if((j%10)==9)cout<<endl;
        }
    }
    return 0;
}
posted @ 2021-04-21 16:42  黒川川  阅读(128)  评论(0)    收藏  举报