士兵队列训练问题
cpp
#include <iostream>
#include <vector>
using namespace std;
void solve()
{
int n;
cin >> n;
vector<int> s(n);
for (int i = 0; i < n; i++)
{
s[i] = i + 1;
}
int num = 1;
while (s.size() > 3)
{
int cnt;
if (num % 2 == 1)
{
cnt = 2;
}
else
{
cnt = 3;
}
vector<int> tem;
int k = 1;
for (int i = 0; i < s.size(); i++)
{
if (k == cnt)
{
k = 1;
continue;
}
tem.push_back(s[i]);
k++;
}
num++;
s = tem;
}
for (int i = 0; i < s.size(); i++)
{
cout << s[i] << " ";
}
cout << endl;
}
int main()
{
int t;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
Team Queue
cpp
#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
int main()
{
int cnt = 1;
int t;
while (cin >> t && t)
{
cout << "Scenario #" << cnt << endl;
// 创建团队映射(元素值 -> 团队ID)
vector<int> team_map(1000000, -1); // 初始化为-1
// 读取团队数据
for (int i = 0; i < t; i++)
{
int n;
cin >> n;
for (int j = 0; j < n; j++)
{
int element;
cin >> element;
team_map[element] = i; // 标记元素所属团队
}
}
// 初始化数据结构
vector<queue<int>> team_queues(t); // 每个团队的队列
queue<int> team_order; // 团队顺序队列
vector<bool> in_queue(t, false); // 标记团队是否在队列中
string command;
while (cin >> command && command != "STOP")
{
if (command == "ENQUEUE")
{
int x;
cin >> x;
int tid = team_map[x]; // 获取元素所属团队ID
// 如果团队已在队列中
if (in_queue[tid]) {
team_queues[tid].push(x);
}
// 如果团队不在队列中
else {
team_queues[tid].push(x);
team_order.push(tid);
in_queue[tid] = true;
}
}
else if (command == "DEQUEUE")
{
// 获取队首团队ID
int tid = team_order.front();
// 获取并移除该团队的队首元素
int x = team_queues[tid].front();
team_queues[tid].pop();
cout << x << endl; // 输出出队元素
// 如果该团队队列为空
if (team_queues[tid].empty()) {
team_order.pop(); // 从团队顺序中移除
in_queue[tid] = false; // 更新标记
}
}
}
cnt++;
cout << endl; // 测试用例结束后的空行
}
return 0;
}