☀L1-049 래더 대회 좌석 배정 (20 점) [시뮬레이션] [벡터]

 

매년 래더 대회에 참가하는 선수가 많은데, 같은 학교의 모든 선수가 서로 인접하지 않도록하는 것이 필요하고 자리를 배정하는 일은 더욱 번거로운 일입니다. 이를 위해 다음과 같은 전략을 수립합니다. 특정 경쟁 분야에 N 개의 학교가 참여하고 i 번째 학교에 M [i] 팀이 있으며 각 팀에 10 명의 선수가 있다고 가정합니다. 각 학교의 선수들을 한 열에 정렬하고 i + 1 번째 팀의 선수는 i 번째 팀의 선수보다 순위가 높습니다. 첫 번째 학교부터 각 학교의 첫 번째 팀원이 순서대로 자리를 잡은 다음 각 학교의 두 번째 팀원이 ... 등등. 학교가 하나만 남아 있고 팀에 좌석이 할당되지 않은 경우 팀원이 별도의 좌석에 앉도록 배치해야합니다. 이 질문은 1부터 시작하여 각 학교의 선수 좌석 번호를 자동으로 생성하는 프로그램을 작성해야합니다.

입력 형식 :

참가 대학 수 N (100을 넘지 않는 양의 정수)을 한 줄에 입력합니다. 두 번째 줄은 10을 초과하지 않는 양의 정수 N을 제공합니다. 여기서 i 번째 숫자는 i 번째 대학의 참가 팀 수에 해당합니다. 공백으로 구분됩니다.

출력 형식:

첫 번째 대학의 첫 번째 팀부터 시작하여 선수의 좌석 번호가 순차적으로 출력됩니다. 각 팀은 한 줄을 차지하고 좌석 번호는 1 칸으로 구분되며 줄의 시작과 끝 부분에 추가 공간이 없어야합니다. 또한 각 대학의 첫 번째 줄에서 "#X"를 눌러 1부터 시작하는 학교 번호 X를 출력합니다.

입력 샘플 :

3
3 4 2

샘플 출력 :

#1
1 4 7 10 13 16 19 22 25 28
31 34 37 40 43 46 49 52 55 58
61 63 65 67 69 71 73 75 77 79
#2
2 5 8 11 14 17 20 23 26 29
32 35 38 41 44 47 50 53 56 59
62 64 66 68 70 72 74 76 78 80
82 84 86 88 90 92 94 96 98 100
#3
3 6 9 12 15 18 21 24 27 30
33 36 39 42 45 48 51 54 57 60
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f;
priority_queue<int,vector<int>,greater<int>>q;
 
const int mod=10e9+7;

int M[110];
int M_large[110];
vector<int>a[110];
bool vis[110];

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>M[i];
        M_large[i]=M[i]*10;
    }
    int no=0;
    int num=1;
    while(no<n)
    {
        for(int i=0;i<n;i++)
        {
            if(a[i].size()<M_large[i])
            {
                a[i].push_back(num);
                if(no==n-1)
                {
                    num+=2;
                }
                else
                    num++;
            }
            if(a[i].size()==M_large[i]&&!vis[i])
            {
                vis[i]=true;
                no++;
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<"#"<<i<<endl;
        for(int j=0;j<a[i-1].size();j++)
        {
            if((j+1)%10==0)
                cout<<a[i-1][j]<<endl;
            else
                cout<<a[i-1][j]<<" ";
        }
    }
    return 0;
}

나는 돼지인데 비스 [i]를 오랫동안 생각했는데 왜 추가해야하나요?

참조 : https://blog.csdn.net/hy971216/article/details/80461526?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160456915319725266912653%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522 % 257D & request_id = 160456915319725266912653 & biz_id = 0 & utm_medium = distribute.pc_search_result.none-task-blog-2 ~ all ~ first_rank_v2 ~ rank_v28-1-80461526.pc_first_rank_v2_rank_v28 & utm_term = L1-101049 + 좌석 할당 + 118.300s8.2.300s

추천

출처blog.csdn.net/qq_43660826/article/details/109519542