PTA 天梯赛 L1-049 天梯赛座位分配(模拟)

就是模拟从每个队依次挑出一个人,模拟的时候就给其赋值同时会记录当前是这个队的第几个人,如果超过这个队的人数就不再赋值,如果最后只剩下一个队,那么编号就要依次加2.

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int>m[110]; ///存储每个学校的同学的编号
int vis[110];
int main()
{
    int n,a[110],sum = 0,len = 0,ren = 0;
    scanf("%d",&n);
    for(int i = 0;i < n; i++)
    {
        scanf("%d",&a[i]);
        a[i] *= 10;
        sum += a[i];
    }
    for(int i = 1;;)
    {
        int t = 0;
        while(t < n)
        {
            if(m[t].size() < a[t])
            {
                ren++;
                m[t].push_back(i);
                if(len + 1 == n) ///最后一个队伍的时候队员编号加2
                    i += 2;
                else ///其它的队伍加1
                    i += 1;
            }
            if(!vis[t] && m[t].size() >= a[t])
            {
                vis[t] = 1;
                len++;
            }
            t++;
        }
        if(ren == sum)
            break;
    }
    for(int i = 0;i < n; i++)
    {
        printf("#%d\n",i+1);
        for(int j = 0;j < m[i].size(); j++)
        {
            if(j % 10)
                printf(" ");
            printf("%d",m[i][j]);
            if(j % 10 == 9)
                printf("\n");
        }
        if(m[i].size() % 10 != 0)
            printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xiao__hei__hei/article/details/87727369