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

mac2022-06-30  27

题目链接

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(" "); } } }

转载于:https://www.cnblogs.com/Dup4/p/9433166.html

最新回复(0)