zoukankan      html  css  js  c++  java
  • Codeforces 704A Thor 队列模拟

    题目大意:托尔有一部手机可执行三种操作

    1.x APP产生一个新消息

    2.读取x App已产生的所有消息

    3.读取前t个产生的消息

    问每次操作后未读取的消息的数量

    题目思路:

    队列模拟,坑点在于竟然卡内存……详细看代码。

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<stdio.h>
    #include<stdlib.h>
    #include<queue>
    #include<math.h>
    #include<map>
    #define INF 0x3f3f3f3f
    #define MAX 300050
    #define Temp 1000000000
    
    using namespace std;
    
    queue<int>Q[MAX];//记录时间戳
    queue<pair<int,int> >time;//记录时间戳和APP的名称
    bool vis[MAX];//标记是否未读取
    
    int main()
    {
        int ant,sum,n,q,x,op;
        ant=1;
        sum=0;
        memset(vis,false,sizeof(vis));
        scanf("%d%d",&n,&q);
        while(q--)
        {
            scanf("%d%d",&op,&x);
            if(op==1)
            {
                Q[x].push(ant);//向队列中添加
                time.push(make_pair(ant,x));
                ant++;
                sum++;//计数加1
            }
    
            else if(op==2)
            {
                while(!Q[x].empty())
                {
                    vis[Q[x].front()]=true;//标记为已读
                    Q[x].pop();//弹出
                    sum--;//计数减1
                }
            }
    
            else if(op==3)
            {
                while(!time.empty() && time.front().first<=x)
                {
                    if(!vis[time.front().first])//如果当前时间戳读入的信息为读取则弹出
                    {
                        Q[time.front().second].pop();
                        sum--;
                    }
                    time.pop();
                }
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    关于XML文档
    Why sql is called structured query language?1
    UML学习---交互
    C#为什么不采用多继承:
    url中
    array
    hard
    构造函数返回值
    布局容器layout Container
    k8s的概念
  • 原文地址:https://www.cnblogs.com/alan-W/p/5936692.html
Copyright © 2011-2022 走看看