Codeforces Round #600 (Div. 2) - B. Silly Mistake(模拟)
题意:有一个公司,每天有员工进出,$a[i]>0$时表示$a[i]$这个员工进入公司,$a[i]<0$时表示$-a[i]$这个员工出公司,公司对进出办公室有一些严格的规定
- 员工每天最多只能进入一次办公室
- 如果那天他没有进办公室的话,他显然不能离开
- 每天开始和结束时,办公室都是空的(员工不能呆在晚上),办公室也可能在一天中的任何时候都是空的
现在给你序列$a$($a[i] \neq 0$),问你是否能够把数组$a$分为几个相邻的子数组,使得每一个子数组员工的进出情况符合要求并输出每一个子数组的长度,或者输出$-1$表示不可能
思路:用一个数组$mk$标记某个人状态,$mk[i]=0$表示$i$号员工在这一天内还没有操作,$mk[i]=1$表示$i$号员工在这一天内已经进入办公室,$mk[i]=-1$表示$i$号员工在这一天内已经进入办公室并且出去了,$num$记录此时办公室的人数,如果$num=0$时则可以进入新的一天,同时需要用一个数组$p$记录这一天已经出去的员工编号,在进入新的一天时,则需要将这些员工的$mk[i]$变为$0$,中间出现不合法的情况直接跳出循环,输出$-1$
#include <iostream>
#include <algorithm>
#include <cstdio> using namespace std; const int N = ;
const int M = ; int n, a[N], mk[M];
int num, cnt, p[N];
int res[N], pos; int main()
{
scanf("%d", &n);
for (int i = ; i <= n; i++) scanf("%d", &a[i]);
int flag = ; res[++pos] = ;
for (int i = ; i <= n; i++) {
if (a[i] > ) {
if ( == mk[a[i]]) {
mk[a[i]] = , num++;
}
else {
flag = ; break;
}
}
else {
if ( == mk[-a[i]]) {
mk[-a[i]] = -, num--;
p[++cnt] = -a[i];
if ( == num) {
for (int j = ; j <= cnt; j++) mk[p[j]] = ;
cnt = , res[++pos] = i;
}
}
else {
flag = ; break;
}
}
}
if ( != num) flag = ;
if (!flag) printf("-1\n");
else {
printf("%d\n", pos - );
for (int i = ; i <= pos; i++) {
printf("%d", res[i] - res[i - ]);
printf(i == pos ? "\n" : " ");
}
}
return ;
}
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 ...
- 【cf比赛记录】Codeforces Round #600 (Div. 2)
Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...
- Codeforces Round #600 (Div. 2) E. Antenna Coverage
Codeforces Round #600 (Div. 2) E. Antenna Coverage(dp) 题目链接 题意: m个Antenna,每个Antenna的位置是\(x_i\),分数是\( ...
- Codeforces Round #368 (Div. 2) B. Bakery (模拟)
Bakery 题目链接: http://codeforces.com/contest/707/problem/B Description Masha wants to open her own bak ...
- B. Silly Mistake Codeforces Round #600 (Div. 2)
B. Silly Mistake 题目大意: 首先定义有效的一天: 每一个不同的数字只能进去一次,出来一次,正数代表进去,负数代表出来 每一个人不能过夜 不合理: 一个数字只有进去,或者只有出来则是无 ...
- Codeforces Round #600 (Div. 2)
传送门 A. Single Push 直接乱搞即可. Code /* * Author: heyuhhh * Created Time: 2019/11/16 22:36:20 */ #include ...
- Codeforces Round #284 (Div. 2)A B C 模拟 数学
A. Watching a movie time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #285 (Div. 2) A B C 模拟 stl 拓扑排序
A. Contest time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- Codeforces Round #600 (Div. 2)E F
题:https://codeforces.com/contest/1253/problem/E 题意:给定n个信号源,俩个参数x和s,x代表这个信号源的位置,s代表这个信号源的波及长度,即这个信号源可 ...
随机推荐
- 【C语言】输入一个字符串,并对字符串中的偶数位置的字符按从小到大的顺序排序,奇数位置的字符不动,输出排序后的结果
#include <stdio.h> #include<string.h> int main() { ]; int i,j,k,len; gets_s(a); len= str ...
- Winform遍历窗口的所有控件(几种方式实现)
本文链接:https://blog.csdn.net/u014453443/article/details/85088733 扣扣技术交流群:460189483 C#遍历窗体所有控件或某类型所有控件 ...
- 计算几何-HPI
This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 在线笛卡尔坐 ...
- Bugku-CTF分析篇-这么多数据包(这么多数据包找找吧,先找到getshell的流)
这么多数据包 这么多数据包找找吧,先找到getshell的流
- 使用docker踩过的坑(二)
关于docker的部署,我这里不多说了 下面写一些最近经常用到的命令: docker下载镜像: docker pull 镜像名 docker查看已下载的所有镜像: docker images dock ...
- 有源汇有上下界最大流 (ZQU1591)
题意:现在的网络有一个源点s和汇点t,求出一个流使得源点的总流出量等于汇点的总流入量,其他的点满足流量守恒,而且每条边的流量满足上界和下界限制. 思路:要满足每一个点的流量守恒,我们可以尝试像无源汇上 ...
- 网站复制工具:HTTrack
HTTrack简介: HTTrack是Kali中内置的工具,主要用于克隆网站.渗透测试人员可以利用它来在自主可控制的环境中查看该网站的完整内容:所有离线文件.同时可以利用该网站的副本来开发假冒的钓鱼网 ...
- js加密(七)steam登录
1. url: https://store.steampowered.com/login/?redir=&redir_ssl=1 2. target: 登录 3. 分析 3.1 老样子,抓包, ...
- 6_9 天平(UVa839)<二叉树的DFS>
前一个ubiquous通信小工具,移动只是一个由弦和电线组成的结构五彩缤纷的东西.这种移动通常被发现悬挂在小婴儿的摇篮.图说明了一个简单的移动.它只是一个电线,悬挂的一个字符串,每一个对象的对象.它可 ...
- idea左侧出现日期和文件大小怎么关闭
shift+alt+\