团体队列(模拟)

news/2024/6/18 21:40:47 标签: 队列, 数据结构, 算法

题目:
团体队列题目

思路:
这是一道模拟题,通过map,和两个queue完成,具体细节大家看代码注释,找清楚之间的关系就好。

#include <bits/stdc++.h>
using namespace std;
const int maxt=1000+10;//最多团队数

int main()
{
    int t,kcase=0;
    //读入t个团
    while(scanf("%d",&t)==1&&t)
    {
        printf("Scaenario #%d\n",++kcase);
        map<int,int> team;//team的key存放队员编号,value存放队伍号
        //将t个团的信息写入map中
        for(int i=0; i<t; i++)
        {
            int n,x;
            scanf("%d",&n);//输入第i个队共有多少人
            while(n--)
            {
                scanf("%d",&x);//读入队员编号
                team[x]=i;
            }
        }
        //开始模拟操作
        queue<int> q,q2[maxt];//q存放,正在排队的队伍号,q2是一个数组,存放queue类型数据,也就是下标为队伍号,值为队伍情况

        for(;;)
        {
            int x;
            char cmd[10];
            scanf("%s",cmd);
            if(cmd[0]=='S')break;//cmd==stop结束循环
            else if(cmd[0]=='D')
            {
                int t=q.front();
                printf("%d\n",q2[t].front());
                q2[t].pop();
                if(q2[t].empty())q.pop();//当整个编号为t的队,都走了,那么q应该pop出这个团
            }
            else if(cmd[0]=='E')
            {
                scanf("%d",&x);//读入队员编号
                int t=team[x];//找到队员的队伍编号
                if(q2[t].empty())q.push(t);//队伍t进入q
                q2[t].push(x);
            }
            printf("\n");

        }

    }
    return 0;
}


http://www.niftyadmin.cn/n/860386.html

相关文章

丑数-优先队列(详细解答)

题目: 丑数是一些因子只有2,3,5的数。数列1,2,3,4,5,6,8,9,10,12,15……写出了从小到大的前11个丑数&#xff0c;1属于丑数。现在请你编写程序&#xff0c;找出第1500个丑数是什么。 输出&#xff1a;The 1500’th ugly number is <…>.&#xff08;<…>为你找到的…

Unix Is命令(UVa 400)详细解答

题目: 输入正整数n 以及n 个文件名&#xff0c;排序后按列优先的方式左对齐输出。假设最长文件名有M 字符&#xff0c;则最右边有M 字符&#xff0c;其他列都是M2 字符。 题目分析: 有n个文件名,其中最长的文件名有M个字符,一下面输入为例,最长的是Mr._French(共有10个字符),然…

超级楼梯(递推)

题目: 有一楼梯共M级&#xff0c;刚开始时你在第一级&#xff0c;若每次只能跨上一级或二级&#xff0c;要走上第M级&#xff0c;共有多少种走法&#xff1f; 输入: 输入数据首先包含一个整数N&#xff0c;表示测试实例的个数&#xff0c;然后是N行数据&#xff0c;每行包含一…

铺方格(升级版递推)详细解答

题目: 有一个大小是2xN的网格,现在需要用2种规格的骨牌铺满,骨牌的规格分别是2x1和2x2,请计算一共有多少铺设的方法。(从左向右铺) 输入: T组数据,N网格列数 (0<N<50) 输出: 所有方案m Sample Input 1 3 2 Sample Output 1 5 3 解题思路: 这道题和超级楼梯有异曲同工…

LIS最长上升子序列

LIS:从一串数字序列,找出连续递增的子序列,并且要求子序列最长! 举例: 一段序列:1,6,2,3,7,5,9,4,11 最长上升子序列为:1,2,3,7,9,11 那么我们如何通过代码实现呢? 我们需要一个数组f,然后通过f记录每一个数字的最大上升子序列。 初始时每一个f[i]1,因为那怕找不到任意一个子…

LCS最长公共子序列

最长公共子序列:顾名思义从两段序列中选出,其中连续并且相同的子串 举例 a串:1 5 7 9 6 3 b串:1 6 3 2 1 5 最长公共子序列 c串:1 6 3 我们如何实现呢? (假设a串有n个数字,b串有m个数字) 我们需要一个二位数组f,通过这个二维数组存放 f(i,j) f(i,j)含义:表示a串前i个数字,和b串…

01背包问题相关优化大全(二维到一维)

下面是普通版本的01背包代码! int dp[105][1005];for(int i1;i<m;i)for(int jt;j>0;j--){if(j>w[i]){dp[i][j]max(dp[i-1][j-w[i]]v[i],dp[i-1][j]);}else{dp[i][j]dp[i-1][j];}}滚动数组优化二维01背包 我们可以看到dp数组需要很大,至少超过2行! 那么我们想一想可不…

完全背包问题(详细解答)

首先完全背包问题需要01背包问题做铺垫,如果读者01背包问题没有解决,一定要理解之后,在看完全背包问题,包括01背包的优化! 这里是01背包 这里是01背包的全部优化 好,我们开始完全背包! 完全背包定义 有N种物品和一个容量为V的背包&#xff0c;每种物品都有无限件可用。第i种物…