Codeforces Coder-Strike 2014 (Div. 2) C: Online Meeting 来得最早走得最晚的leader
2014-04-23 11:50
309 查看
原题链接:Codeforces 421C - Online Meeting (CSDN貌似抽了,不能加http的链接了,大家自行把链接头的https改成http吧。。)
题目大意:给定一部分连续的用户上下线log(注意,是一部分,不是全部),判断哪些人有可能是团队leader。判断的依据:在任何一个有人在线的时刻,某人都在线,则这个人就认为有可能是leader。log完全按照时间先后顺序来,且同一时刻没有两个人同时上线或下线,即不存在并发行为。
大致思路:首先,自始至终没有出现过的用户肯定在候选leader中。其次,需要找到log中实际最早到的人。最早到的人有两种情况:log中第一条记录的人、没有上线行为只有下线行为的人。所以可以使用一个变量first记录当前最早到的人,每遇到一个直接下线的人就更新一次first。然而这样记录下来的first不一定是候选leader,因为可能他下线之后仍有人上线,或者他下线的时候还有人在线,这两种情况都不符合题目给的判断依据,故不能加入候选leader中。
题目大意:给定一部分连续的用户上下线log(注意,是一部分,不是全部),判断哪些人有可能是团队leader。判断的依据:在任何一个有人在线的时刻,某人都在线,则这个人就认为有可能是leader。log完全按照时间先后顺序来,且同一时刻没有两个人同时上线或下线,即不存在并发行为。
大致思路:首先,自始至终没有出现过的用户肯定在候选leader中。其次,需要找到log中实际最早到的人。最早到的人有两种情况:log中第一条记录的人、没有上线行为只有下线行为的人。所以可以使用一个变量first记录当前最早到的人,每遇到一个直接下线的人就更新一次first。然而这样记录下来的first不一定是候选leader,因为可能他下线之后仍有人上线,或者他下线的时候还有人在线,这两种情况都不符合题目给的判断依据,故不能加入候选leader中。
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int arr[100005]; //记录用户的当前状态:0代表没有出现过、1代表在线、-1代表离线 int main() { memset(arr,0,sizeof(arr)); int first = -1; //当前认定最早到的人,可能是第一个人,也可能是没有上过线直接下线的人 bool first_flag = false; //判断first是否是候选leader int n, m, temp, sum=0; int countOn=0; //记录在线的总人数 char ch; scanf("%d %d%*c", &n ,&m); for(int i=0; i<m; i++) { scanf("%c %d%*c", &ch, &temp); if(i==0) { first = temp; first_flag = true; } if(ch=='+') { if(temp!=first && arr[first]==-1) first_flag = false; //若当前认定最早到的人已经下线后,仍有其他人上线,则first不是候选人 arr[temp] = 1; countOn++; } else { if(arr[temp]==1) countOn--; //若之前是在线的,现在下线,则将总在线人数-1 if(temp != first && arr[temp]==0) { //若之前是潜水,现在下线,说明这个人来得比前面的人都早,更新first first = temp; first_flag = true; } if(temp==first && countOn > 0) first_flag = false; //若当前认定最早到的人下线的时候还有人在线,则first不在候选人中 arr[temp] = -1; } } if(first_flag) arr[first] = 0; for(int i=1; i<=n; i++) { if(arr[i]==0) sum++; } cout<<sum<<endl; for(int i=1; i<=n; i++) { if(arr[i]==0) cout<<i<<" "; } return 0; }
相关文章推荐
- Codeforces Coder-Strike 2014 - Finals (online edition, Div. 1)
- Coder-Strike 2014 - Finals (online edition, Div. 2) Online Meeting
- codeforces Coder-Strike 2014 Round 1 C题解题报告
- codeforces Coder-Strike 2014 Round 1 B题解题报告
- Coder-Strike 2014 - Finals (online edition, Div. 2)——Bug in Code
- codeforces Coder-Strike 2014 Round 1 A题解题报告
- Coder-Strike 2014 - Finals (online edition, Div. 2) D.Bug in Code
- Coder-Strike 2014 - Finals (online edition, Div. 1) C. Bug in Code
- Coder-Strike 2014 - Finals (online edition, Div. 2)
- Coder-Strike 2014 - Finals (online edition, Div. 2) Online Meeting
- Coder-Strike 2014 - Finals ( Div. 2) B. Start Up
- 【Codeforces Round 274 (Div 2)C】【贪心】Exams a[i]位置写a[i]或b[i] 所有位置的数保证不下降的最早结束时间
- Coder-Strike 2014 - Finals (online edition, Div. 2) B. Start Up
- Coder-Strike 2014 - Finals (Div. 2) A. Pasha and Hamsters
- 【Codeforces Round 363 (Div 2) A】【水题】Launch of Collider 机器人最早碰撞时间
- Coder-Strike 2014 - Finals (online edition, Div. 2) A. Pasha and Hamsters
- Coder-Strike 2014 - Finals (online edition, Div. 2 A、B)
- Coder-Strike 2014 - Finals (online edition, Div. 1)
- codeforces-Coder-Strike 2014 - Finals (online edition, Div. 2)
- Coder-Strike 2014 - Finals (online edition, Div. 1)-a-b-c