只是贴代码,这种模拟题一定要好好纪念下 TAT

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int MAXN = (int) 1e5+;
  8.  
  9. bool is[MAXN];
  10. int msg[MAXN];
  11.  
  12. int first_in[MAXN], last_in[MAXN], last_out[MAXN];
  13. bool flag[MAXN];
  14. bool in[MAXN];
  15. char str[];
  16. int n, m;
  17. int st;
  18.  
  19. void print() {
  20. printf("st: %d, m:%d\n", st, m);
  21. for (int i = ; i <= n; i++)
  22. printf("%d ", first_in[i]); puts("");
  23. for (int i = ; i <= n; i++)
  24. printf("%d ", last_in[i]); puts("");
  25. for (int i = ; i <= n; i++)
  26. printf("%d ", last_out[i]); puts("");
  27. for (int i = ; i <= n; i++)
  28. printf("%d ", flag[i]); puts("");
  29. }
  30.  
  31. /**
  32. 我们可以分为如下几种情况:
  33. 1. 从来没出现过
  34. 2. 进入时,或者出去时有其他人
  35. 3. 进入时没人,但进来前其他人来过
  36. 4.
  37. */
  38. int main() {
  39. #ifdef Phantom01
  40. freopen("C.txt", "r", stdin);
  41. #endif // Phantom01
  42.  
  43. while (scanf("%d%d", &n, &m)!=EOF) {
  44. st = ; //第一个人的进入时间
  45. int cnt = ;
  46. memset(first_in, -, sizeof(first_in));
  47. memset(last_in, -, sizeof(last_in));
  48. memset(last_out, -, sizeof(last_out)); //如果从没出去过,为-1
  49. memset(flag, false, sizeof(flag));
  50. memset(in, , sizeof(in));
  51. int num = ;
  52. for (int i = ; i <= m; i++) { //记录时间从1开始
  53. int t;
  54. scanf("%s%d", str, &t);
  55. //没有考虑到最后一刻还有人的情况
  56. if ('+'==str[]) {
  57. is[i] = true;
  58. if (-==first_in[t]) first_in[t] = i;
  59. } else {
  60. is[i] = false;
  61. if (-==first_in[t]) {
  62. first_in[t] = ;
  63. num++;
  64. st = ;
  65. }
  66. }
  67. msg[i] = t;
  68. }
  69. //print();
  70. for (int i = ; i <= m; i++) {
  71. int t = msg[i];
  72. if (is[i]) {
  73. last_in[t] = i; //记录最近进入时间(好像没必要)
  74. if (last_out[t]> && last_in[t]-last_out[t]>) { //如果上次出去的时间不是在前一个时刻,那么中间一定有人进来
  75. if (!flag[t]) { //若果没被标记过,就标记他不符合情况
  76. flag[t] = true;
  77. cnt++;
  78. }
  79. }
  80. num++;
  81. } else {
  82. last_out[t] = i;
  83. num--;
  84. if (num>) {
  85. if (!flag[t]) {
  86. flag[t] = true;
  87. cnt++;
  88. }
  89. }
  90. }
  91. }
  92.  
  93. for (int i = ; i <= n; i++) {
  94. if (first_in[i]>st //如果首次进入时间在第一个进入之后,
  95. || ((last_out[i]>last_in[i]) //或者最后一次出去在
  96. && ((num > ) //里面还有人
  97. || (<last_out[i]&&last_out[i]<m )))) { //而且最后一次出去在最后一个人之前,一定不行
  98. if (!flag[i]) {
  99. flag[i] = true;
  100. cnt++;
  101. }
  102. }
  103. }
  104. printf("%d\n", n-cnt);
  105. bool flag2 = false;
  106. for (int i = ; i <= n; i++) if (!flag[i]) {
  107. if (flag2) printf(" ");
  108. printf("%d", i);
  109. flag2 = true;
  110. }
  111. if (flag2) puts("");
  112. }
  113.  
  114. return ;
  115. }

CF 420B Online Meeting 模拟题的更多相关文章

  1. CF - 420B - Online Meeting(思维)

    题意:n 个人參加线上会议.某经理记录了中间一段时间的 m 条上下线记录(1 ≤ n, m ≤ 105).+ 表示上线,- 表示下线. leader是指仅仅要有人在线,他都在线的人.求全部可能的lea ...

  2. cf 443 D. Teams Formation](细节模拟题)

    cf 443 D. Teams Formation(细节模拟题) 题意: 给出一个长为\(n\)的序列,重复\(m\)次形成一个新的序列,动态消除所有k个连续相同的数字,问最后会剩下多少个数(题目保证 ...

  3. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  4. poj 1888 Crossword Answers 模拟题

    Crossword Answers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 869   Accepted: 405 D ...

  5. CF 628B New Skateboard --- 水题

    CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整 ...

  6. CF 628A --- Tennis Tournament --- 水题

    CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...

  7. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  8. sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)

    The Android University ACM Team Selection Contest Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里 ...

  9. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

随机推荐

  1. (转载)项目实战工具类(一):PhoneUtil(手机信息相关)

    项目实战工具类(一):PhoneUtil(手机信息相关)   可以使用的功能: 1.获取手机系统版本号 2.获取手机型号 3.获取手机宽度 4.获取手机高度 5.获取手机imei串号 ,GSM手机的 ...

  2. RXjava的简介

    API 介绍和原理简析 1. 概念:扩展的观察者模式 观察者模式面向的需求是:举一个例子,警察在小偷实施作案的时候实施抓捕,在这一个例子中警察是观察者,小偷是被观察者.但是程序的观察者模式和这个还是有 ...

  3. Matlab 从入门到精通 Chapter11 文件读取I/O

    11.1 工作空间数据读取 将工作空间的变量保存为文件,可以使用save命令.  save('filename') 将文件保存在当前目录下,文件名为filename.mat save('filenam ...

  4. [SDOI2008]沙拉公主的困惑 线性筛_欧拉函数_逆元_快速幂

    Code: #include<cstdio> using namespace std; typedef long long ll; const int maxn=10000000+1; l ...

  5. (六)Redux进阶

    1 UI组件与容器组件的拆分 UI组件(傻瓜组件):只负责页面显示,没有任何逻辑 容器组件(聪明组件):并不去管UI到底长成什么样,关注的是整个业务逻辑 2 无状态组件 一个普通的函数就是无状态组件 ...

  6. 关于 Error: No PostCSS Config found in 的错误

    问题描述: 项目在本地运行不报错,上传到 GitHub 之后,再 clone 到本地, npm install 安装完成之后再执行 npm run dev 这时报错 Error: No PostCSS ...

  7. Linux头文件的设置

    GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径. 1.include头文件路径 除了默认的/usr/include, /usr/local/include ...

  8. zookeeper 安装笔记 3.6.7

    1 下载 ZK wget  http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.7/zookeeper-3.4.7.tar.gz   2 解 ...

  9. NSURLConnection和NSRunLoop

    主线程中创建一个NSURLConnection并异步运行 [self performSelectorOnMainThread:@selector(start) withObject:nil waitU ...

  10. 10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)

    ndk编译C++.提示找不到头文件(ndk-build error: string: No such file or directory) 被这个问题弄得愁眉苦脸啊.心想为啥一个string都找不到呢 ...