天梯赛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;
}

浙公网安备 33010602011771号