B.Silly Mistake
题目:愚蠢的错误##
题意:中心公司有一个办公室有一个成熟的安全系统,这里面有106个雇员,编号从1到106
安全系统有入口和出口,数字i表示第i个雇员进入,-i表示第i个雇员出去
公司有一些严格的规矩:
1.雇员一天可以进入办公司最多一次
2.如果今天雇员没进雇员,他是无法出去的
3.办公室空的,代表里面的人都出去了
[1, 7, -7, 3, -1, -3]表示一个有效的一天,1进入,7进入,7出去,3进入,1出去,3出去
这里有a1,a2,...,an表示它们进出的序列,这个序列表示一天或者多天
你必须把这个序列划分成多天
例如:a = [1, -1, 1, 2, -1, 2, 3, -3]可以被划分成[1, -1| 1, 2, -1, -2, 3, -3],
即两天
如果没有有效的划分,输出-1
如果有有效的划分,输出划分的天数和每段的元素个数,如果有多个答案,输出一种就行(暗示贪心)
分析:解决这个问题有一种直观的贪心做法,模拟序列的进出,只要办公室出现一次空的,就记录划分的段数,
新开一天
为了有效地模拟这个问题,我们可以给予数组中每个雇员三种状态:进入办公室/在办公室里/离开办公室
每当我们结束一天,只需要重置参与的员工的状态
时间复杂度:O(n + e)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1000005;
int n;
vector<int> off;//办公室
vector<int> sec;//段
int state[N];//每个雇员的状态
const int WAIT = 0, ENTERED = 1, LEFT = 2;
int solve()
{
scanf("%d", &n);
int len = 0;
int em;//雇员
for (int i = 1; i <= n; ++i)
{
cin >> em;
int guy = abs(em);
off.push_back(guy);
if (em > 0)//进入
{
if (state[guy] != WAIT)return false;
state[guy] = ENTERED;
++len;
}
else {//出去
if (state[guy] != ENTERED)return false;
state[guy] = LEFT;
--len;
}
if (len == 0)
{
sec.push_back(off.size());
for (int x : off)state[x] = WAIT;
off.clear();
}
}
if (!off.empty())return false;
int nDays = sec.size();
cout << nDays << endl;
for (auto t : sec)
{
cout << t << " ";
}
return true;
}
int main()
{
if (!solve())
cout << "-1\n";
return 0;
}
B.Silly Mistake的更多相关文章
- B. Silly Mistake Codeforces Round #600 (Div. 2)
B. Silly Mistake 题目大意: 首先定义有效的一天: 每一个不同的数字只能进去一次,出来一次,正数代表进去,负数代表出来 每一个人不能过夜 不合理: 一个数字只有进去,或者只有出来则是无 ...
- Codeforces Round #600 (Div. 2) B. Silly Mistake
#include<iostream> #include<map> #include<set> #include<algorithm> using nam ...
- Codeforces Round #600 (Div. 2) - B. Silly Mistake(模拟)
题意:有一个公司,每天有员工进出,$a[i]>0$时表示$a[i]$这个员工进入公司,$a[i]<0$时表示$-a[i]$这个员工出公司,公司对进出办公室有一些严格的规定 员工每天最多只能 ...
- What's New in C# 6.0
Static Types as using So, we are all quite familiar with this notion of accessing static class membe ...
- Doing well in your courses ---- a guide by Andrej Karpathy
Doing well in your courses a guide by Andrej Karpathy Here is some advice I would give to younger st ...
- What's New in C# 6.0(转)
原文地址:http://www.codeproject.com/Tips/1023426/Whats-New-in-Csharp 本来想翻译一下贴出来,但是好像很多语言组织起来比较困难,读书少不会表达 ...
- asp.net 网站所有请求跳转到同一个页面
应用场景:网站维护和未开发完成时,一般需要把所有请求都跳转的一个相关说明的页面,这样用户不至于困惑这个网站是不存在还是怎么了. Solution1:使用一个名称为 app_offline.htm(名字 ...
- Django performance
Reference: https://impythonist.wordpress.com/2016/02/21/building-high-performance-django-systems/ Th ...
- 《Java大学教程》—第19章 改进用户界面
用户与程序交互的媒介称为用户界面(user interface)或人机界面(human-computer interface). 19.2 Border接口8个实现Border接口的标准边框类: ...
随机推荐
- (转)白话数字签名(2)——软件&设备
然而它太慢了 非对称加密算法有一个重大缺点——加密速度慢,或者说得更拽一些,编码率比较低.例如在上一篇里我给Clark传的那个1GB的小电影,进行非对称加密足足用了66小时.那个借条小一些吧,也用了将 ...
- awk 实用案例介绍
awk 简介 • awk是 3 个姓氏的首字母,代表该语言的 3 个作者 • awk的版本有很多,包括: 旧版 awk,新版 awk(nawk), GNUawk(gawk)等 • awk程序有 awk ...
- Look into Bitmap images
What's a Bitmap image? I'm not going to explain the differences between raster and vector images, no ...
- Cef 因系统时间不正常,导致页面访问空白问题
当我们的系统时间不正常,比如设置一个日期-1999年9月9日,会引发证书问题. 系统时间不正常-IE有概率能访问 触发NavigateError事件,异常代码INET_E_INVALID_CERTIF ...
- 深度剖析Javascript执行环境、作用域链
一.执行环境 执行环境(也叫做执行上下文,Execution Context)是Javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问其他数据,决定了它们各自的行为.每个执行环境都 ...
- 从0开始学前端(笔记备份)----HTML部分 Day1 HTML标签
- fiddler工具使用大全
Fiddler基础知识 Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改. 代理就是在 ...
- Vue使用element上传
<el-upload action v-if="IsUpload" style="display:inline" list-type="pict ...
- nginx配置路径问题
编译了一个程序放在服务器上,通过nginx配置转发访问.例如在配置下图的地址 d:\wayne\nginxWeb\www: 发现无法正常运行,查看error.log发现是有问题的,当创建文件时,ngi ...
- k8s 随记
1.kubelet参数解析:https://blog.csdn.net/qq_34857250/article/details/84995381 2.如何在github中查找k8s代码关键字? 现在我 ...