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\n", i + 1);
for (int j = 0; j < vis[i]; j++)
{
printf("%d", ans[i][j]);
if (j && (j +1) % 10 == 0)
printf("\n");
else
printf(" ");
}
}
}