CodeFroce
来源:互联网 发布:免费建造师做题软件 编辑:程序博客网 时间:2024/06/15 07:55
题目链接 : CODEFROCE 420B
题目分析:
一道挺有挑战性的题。告诉你有N个人,而现在要从中判断哪些人有可能是领导。是领导的条件是,在有人在的时候他必须在,没人的时候可有可无。现在给出了M条记录,叫你来判断哪些人有可能是领导。
思路解析:
我们可以用模拟的思路把这个过程给算出来。因为,在M条记录中没出现的人肯定是有可能是领导的。所以,我们只要判断给出的M条记录中的人就好了。
#include <cstdio>#include <set>using namespace std;bool type[100005];int ind[100005];set<int> haveInBeg;int main(){int n, m;scanf("%d%d", &n, &m);for(int i=0; i < m; ++i){char inp[2];scanf("%s%d", inp, ind+i);--ind[i];if(inp[0] == '+'){type[i]=1;}else{type[i]=0;}}for(int i=m-1; i >= 0; --i){ //保存先出现退出记录的人(因为我们可以假设他是很早很早出现的)if(type[i]){haveInBeg.erase(ind[i]);}else{haveInBeg.insert(ind[i]);}}set<int> ans;for(int i=0; i < n; ++i) ans.insert(i);for(int i=0; i < m; ++i){if(type[i]){if(i && ind[i-1] != ind[i]) //前面有人,但是ind[i]不在ans.erase(ind[i]); if(!haveInBeg.empty()) //前面有人,ind[i]不在ans.erase(ind[i]);haveInBeg.insert(ind[i]); //模拟,让他进入}else{if(i < m-1 && ind[i+1] != ind[i]) //他不是最后一个离场ans.erase(ind[i]);haveInBeg.erase(ind[i]); //模拟,让他离开if(!haveInBeg.empty()) //还有人没离开,而他先离开了ans.erase(ind[i]);}}printf("%d\n", ans.size());for(auto it = ans.begin(); it != ans.end(); ++it)printf("%d ", *it+1);}
3 0
- CodeFroce
- D. Renting Bikes(CodeFroce)
- codefroce D. Powerful array[初识块状数组]
- CodeFroce 369div2 B - Chris and Magic Square
- CodeFroce Round 340 div2 E XOR and Favorite Number【莫队算法】
- Java:JSTL遍历数组,List,Set,Map等
- 我的事你不知道的事
- Struts时整合spring 应注意的问题
- hadoop计算平均值
- java各种引用
- CodeFroce
- 陋室铭
- ubuntu服务器分区基础
- 超凡蜘蛛侠2 The Amazing Spider-Man 2 (2014) BT在线观看下载地址
- Android UI 限定字数 单独一行
- 当运行ls -F命令时,文件名后边的符号的意思(*,|,=,/,>,@)
- UVA 10194 Football (aka Soccer)
- Raw-OS源码分析之任务挂起与唤醒
- javascript的prototype