zoukankan      html  css  js  c++  java
  • CF #366(div.2) C 模拟,思维

    CF #366(div.2)  C.  Thor   

    题意:一个手机n个联系人,有q个操作。每次给出ty和ai,如ty==1,表示收到ai的一条信息;如ty==2,表示将ai发的信息都看掉;如ty==3,表示将第1条到第ai条信息都看掉(看过的再看也算)。求每次操作后有多少条信息是没看的。

    总结:思维题,看着简单,但就是不好做。。看了一个神犇的代码

    //CF#366 C
    #include<cstdio>
    using namespace std;
    
    int n, q, k, v, x, y, t, a[300300], b[300300], c[300300];
    //x表示按第3种最大的右边界,a[]表示按第1种输入进去的数,b[]表示x后面没有看的数量,c[]表示x后面ai出现次数
    int main() {
        scanf("%d%d", &n, &q);
        while (q--) {
            scanf("%d%d", &k, &v);
            if (k == 1)   a[++y] = v, b[v]++, c[v]++, t++;
            else if (k == 2)   t -= b[v], b[v] = 0;
            else {
                while (x < v) { //关键
                    n = a[++x];  
                    if (c[n]) c[n]--;  //x~v, 将a[x]出现次数-1
                    if(b[n] > c[n]) t--, b[n]--;  //b[]肯定是要<=c[]的,如果b[]>c[],表示a[x]要看掉一个
                }
            }
            printf("%d
    ", t);
        }
    }
    View Code
  • 相关阅读:
    Java 集合框架
    Java 网络编程
    Java序列化
    Java 发送邮件
    Java 多线程编程
    Java 文档注释
    Java Applet基础
    Python 基础教程
    Python 简介
    一步步学习SPD2010--第三章节--处理列表和库(19)----关键点
  • 原文地址:https://www.cnblogs.com/sbfhy/p/6292731.html
Copyright © 2011-2022 走看看