CF - 420B - Online Meeting(思维)
题意: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\n", 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;
}
CF - 420B - Online Meeting(思维)的更多相关文章
- CF 420B Online Meeting 模拟题
只是贴代码,这种模拟题一定要好好纪念下 TAT #include <cstdio> #include <cstring> #include <algorithm> ...
- CF D. Fair(思维+DFS)
http://codeforces.com/contest/987/problem/D 题目大概: 给出一个n个城镇m条边的图,给出每个城镇拥有的特产(可能多个城镇有相同特产).有k种不同特产. 要求 ...
- 2019牛客多校第四场A meeting 思维
meeting 题意 一个树上有若干点上有人,找出一个集合点,使得所有人都到达这个点的时间最短(无碰撞) 思路 就是找树的直径,找直径的时候记得要找有人的点 #include<bits/stdc ...
- codeforces 420B Online Meeting
一道实现很蛋疼的题.必须静下理清思路,整理出各种情况.不然就会痛苦地陷入一大堆if..else里不能自拔. #pragma comment(linker, "/STACK:102400000 ...
- CF 988C Equal Sums 思维 第九题 map
Equal Sums time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- cf 之lis+贪心+思维+并查集
https://codeforces.com/contest/1257/problem/E 题意:有三个集合集合里面的数字可以随意变换位置,不同集合的数字,如从第一个A集合取一个数字到B集合那操作数+ ...
- 【31.42%】【CF 714A】Meeting of Old Friends
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- Coder-Strike 2014 - Finals (online edition, Div. 1)
CF 420A A. Start Up 题目链接: http://codeforces.com/problemset/problem/420/A 题目意思: 给一个字符串A,通过镜面反射后得到A', ...
- Online Meeting CodeForces - 420B (思维)
大意: 给定某一段连续的上线下线记录, 老板上线或下线时房间无人, 并且每次会议都在场, 求哪些人可能是老板. 结论1: 从未出现过的人一定可以是老板. 结论2: 出现过的人中老板最多只有1个. 结论 ...
随机推荐
- c++ stl在acm的入门及使用
stl的全称为Standard Template Library,即为标准模板库,它主要依赖于模板,而不是对象,所以你需要对这个模板进行实例化,选择你要使用的类型.我们用的都是一些简单的容器吧 这里可 ...
- (转载)django 访问url报错Forbidden (CSRF cookie not set.): xxx 问
原地址:http://www.cnblogs.com/meitian/p/7016336.html 问题:页面访问时报错 Forbidden (CSRF cookie not set.): xxx ...
- java如何建项目
java常开发的项目有哪几种? 这几种项目都是怎么建的?
- asp.net允许跨域访问
C# ASP.NET MVC 配置允许跨域访问 在web.config文件中的 system.webServer 节点下 增加如下配置 <httpProtocol> <customH ...
- [Gym101982M][思维好题][凸壳]Mobilization
[gym101982M][思维好题][凸壳]Mobilization 题目链接 20182019-acmicpc-pacific-northwest-regional-contest-div-1-en ...
- BZOJ 4069 [Apio2015]巴厘岛的雕塑 ——贪心
自己首先想了一种方法$f(i)$表示前$i$个最小值为多少. 然而发现位运算并不满足局部最优性. 然后我们可以从高到低贪心的判断,使得每一组的和在一个特定的范围之内. 还要特判最后一个Subtask, ...
- php中的对象赋值
如果现在问你一个问题: <?php class A{ public $a = 1; } $a = new A(); $b = $a; $b->a = 3; print_r($a->a ...
- 勒索病毒 -- “永恒之蓝”NSA 武器免疫工具
“永恒之蓝”NSA 武器免疫工具 针对 445 端口:445端口是一个毁誉参半的端口,他和139端口一起是IPC$入侵的主要通道.有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因 ...
- nodeJS学习(5) --- sublime Text3 安装使用
本节对对工具 sublime Text3 的安装进行简介. 主要参考网址:http://blog.csdn.net/sam976/article/details/52076271 http://w ...
- 最长k可重区间集(cogs 743)
«问题描述:«编程任务:对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度.«数据输入:由文件interv.in提供输入数据.文件的第1 行有2 个正整数n和k,分别表示开区间 ...