zoukankan      html  css  js  c++  java
  • CF

    题意:n 个人參加线上会议。某经理记录了中间一段时间的 m 条上下线记录(1 ≤ n, m ≤ 105)。+ 表示上线,- 表示下线。

    leader是指仅仅要有人在线,他都在线的人。求全部可能的leader。

    题目链接:http://codeforces.com/problemset/problem/420/B

    ——>>这种一种人,他们在记录中的第一条记录是下线的,定义为xx。。

    三个断言:

    1)假设xx存在。那么出现的人中,leader仅仅可能是最后出现的那个xx。。

    2)假设xx不存在,那么出现的人中,leader仅仅可能是第一个登录的人。。

    3)没出现过的人都能够是leader。

    #include <cstdio>
    #include <set>
    
    using std::set;
    
    const int MAXN = 100000 + 10;
    
    int n, m;
    char op[MAXN];
    int p[MAXN];
    int sum, leader;
    int firstPlus = -1, lastInfinite = -1;
    bool vis[MAXN];
    
    void Init()
    {
        sum = n;
        for (int i = 1; i <= n; ++i)
        {
            vis[i] = true;
        }
    }
    
    void Read()
    {
        for (int i = 1; i <= m; ++i)
        {
            getchar();
            scanf("%c%d", op + i, p + i);
            if (op[i] == '-' && vis[p[i]] == true)
            {
                lastInfinite = p[i];
            }
            if (firstPlus == -1 && op[i] == '+')
            {
                firstPlus = p[i];
            }
            if (vis[p[i]])
            {
                vis[p[i]] = false;
                --sum;
            }
        }
    }
    
    void Solve()
    {
        set<int> se;
    
        leader = lastInfinite == -1 ?

    firstPlus : lastInfinite; if (lastInfinite != -1) { se.insert(leader); } for (int i = 1; i <= m; ++i) { if (op[i] == '+') { se.insert(p[i]); if (se.find(leader) == se.end()) { leader = -1; break; } } else { if (!se.empty()) { se.erase(p[i]); } if (!se.empty() && se.find(leader) == se.end()) { leader = -1; break; } } } if (leader != -1) { vis[leader] = true; ++sum; } } void Output() { printf("%d ", sum); if (sum == 0) return; bool first = true; for (int i = 1; i <= n; ++i) { if (vis[i]) { if (first) { first = !first; } else { printf(" "); } printf("%d", i); } } puts(""); } int main() { while (scanf("%d%d", &n, &m) == 2) { Init(); Read(); Solve(); Output(); } return 0; }



  • 相关阅读:
    subprocess(子进程模块)
    logging日志模块,hashlib hash算法相关的库,
    json pickle xml shelve configparser
    os与操作系统进行交互,sys解释器相关,random随机数,shutil解压和压缩
    目录规范+时间模块
    vue的组件
    drf 分页
    包和模块
    docker镜像&nginx配置
    匿名函数 递归 二分法 面向过程编程
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6788870.html
Copyright © 2011-2022 走看看