PAT 天梯赛 L1-049. 天梯赛座位分配 【循环】

题目链接

https://www.patest.cn/contests/gplt/L1-049

思路

用一个二维数组来保存一个学校每个队员的座位号

然后需要判断一下 目前的座位号 与该学校当前状态下最后一个分配的队员的座位号 是不是只相差1 如果是 那么就要再加1 因为当前的状态 应该就是只剩下这个学校的队伍了 要隔一个

最后 对于每个学校 10个一组 10个一组 输出来就可以了

AC代码

#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>

#define CLR(a) memset(a, 0, sizeof(a))
#define pb push_back

using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;

const double PI  = 3.14159265358979323846264338327;
const double E   = exp(1);
const double eps = 1e-6;

const int INF  = 0x3f3f3f3f;
const int maxn = 1e5 + 5;
const int MOD  = 1e9 + 7;

vector <int> ans[100];
int vis[100];

int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &vis[i]);
        vis[i] *= 10;
    }   
    int count = 1;
    while (1)
    {
        int flag = 0;
        for (int i = 0; i < n; i++)
        {
            if (ans[i].size() < vis[i])
            {
                if (ans[i].size() && count - ans[i][ans[i].size() - 1] == 1)
                    count ++;
                ans[i].pb(count++);
                if (ans[i].size() < vis[i])
                    flag = 1;
            }
        }
        if (flag == 0)
            break;
    }
    for (int i = 0; i < n; i++)
    {
        printf("#%d
", i + 1);
        for (int j = 0; j < vis[i]; j++)
        {
            printf("%d", ans[i][j]);
            if (j && (j +1) % 10 == 0)
                printf("
");
            else 
                printf(" ");
        }
    }
}
原文地址:https://www.cnblogs.com/Dup4/p/9433166.html