THU2015 fall 1-2 Company

来源:互联网 发布:淘宝信用支付什么意思 编辑:程序博客网 时间:2024/05/18 03:45

THU2015 fall 1-2 Company


描述

  公司有n个员工,编号1 ~ n。员工数量众多,需要你为他们编写一个管理系统。

  员工上班时都要登录管理系统登记一个code,离开要从管理系统上注销,员工也可以随时更新自己的code。到了下班时间,所有员工都会自动注销。公司管理人员随时都可能想要知道有多少员工上班,以及任一员工登记的code。

输入

  第一行两个整数n、m。接下来m行,每行都是以下内容之一:

Iac//Log In:员工a登录,code为c。若a已登录,则将code更新为cOa//Log Out:编号为a的员工注销。若a未登录,则注销无效C//Close:到下班时间,所有员工注销N//Number:询问有多少员工正在上班Qa//Query:询问员工a的code(若未登录或已注销,视为-1)

输出

  一个整数,是所有询问(N、Q)的答案之和(int表示,自动溢出,不用管溢出部分)

输入样例

108I12I14Q1CI24O2Q2N

输出样例

3//“Q 1”答案是4,“Q 2”答案是-1,“N”答案是0,所有答案之和为3

限制

  n <= 10,000,000

  m <= 1,000,000

  1<=a<=n

  code为[0, 2^31)的整数

  空间限制:256 MB

  时间限制:2 sec

提示

一级提示

  测试数据中,每种操作都可能频繁出现,或很少出现。因此,你的算法需要应对所有可能的情况。


代码如下:

#include <stdio.h>//#include <stdlib.h>#include <string.h>#include <bitset>const int SZ = 1 << 20;struct fastio {   //fast iochar inbuf[SZ];char outbuf[SZ];fastio() {setvbuf(stdin, inbuf, _IOFBF, SZ);setvbuf(stdout, outbuf, _IOFBF, SZ);}}io;#define N 10000000#define M 1000000int num[N + 1];std::bitset<N + 1> bit;int main(){int n, m;int count = 0;scanf("%d%d", &n, &m);int ans = 0;while (m--){char c;int a, b;while (scanf("%c", &c) && c != 'I' && c != 'O'&& c != 'C'&& c != 'N'&& c != 'Q');if (c == 'I'){scanf("%d %d", &a, &b);if (bit[a] == 0){count++;bit.set(a);}num[a] = b;}else if (c == 'O'){scanf("%d", &a);if (bit[a] == 1){bit.reset(a);count--;}}else if (c == 'C'){bit.reset();count = 0;}else if (c == 'Q'){scanf("%d", &a);ans += bit[a] == 1? num[a]:-1;}else if (c == 'N'){ans += bit.count();}}printf("%d\n", ans);//system("pause");return 0;}


0 0
原创粉丝点击