第二天叫醒我的不是闹钟,是梦想!

The Central Company has an office with a sophisticated security system. There are 106 employees, numbered from 1 to 106.

The security system logs entrances and departures. The entrance of the i-th employee is denoted by the integer i, while the departure of the i-th employee is denoted by the integer −i.

The company has some strict rules about access to its office:

An employee can enter the office at most once per day.
He obviously can’t leave the office if he didn’t enter it earlier that day.
In the beginning and at the end of every day, the office is empty (employees can’t stay at night). It may also be empty at any moment of the day.
Any array of events satisfying these conditions is called a valid day.

Some examples of valid or invalid days:

[1,7,−7,3,−1,−3] is a valid day (1 enters, 7 enters, 7 leaves, 3 enters, 1 leaves, 3 leaves).
[2,−2,3,−3] is also a valid day.
[2,5,−5,5,−5,−2] is not a valid day, because 5 entered the office twice during the same day.
[−4,4] is not a valid day, because 4 left the office without being in it.
[4] is not a valid day, because 4 entered the office and didn’t leave it before the end of the day.
There are n events a1,a2,…,an, in the order they occurred. This array corresponds to one or more consecutive days. The system administrator erased the dates of events by mistake, but he didn’t change the order of the events.

You must partition (to cut) the array a of events into contiguous subarrays, which must represent non-empty valid days (or say that it’s impossible). Each array element should belong to exactly one contiguous subarray of a partition. Each contiguous subarray of a partition should be a valid day.

For example, if n=8 and a=[1,−1,1,2,−1,−2,3,−3] then he can partition it into two contiguous subarrays which are valid days: a=[1,−1 | 1,2,−1,−2,3,−3].

Help the administrator to partition the given array a in the required way or report that it is impossible to do. Find any required partition, you should not minimize or maximize the number of parts.

Input
The first line contains a single integer n (1≤n≤105).

The second line contains n integers a1,a2,…,an (−106≤ai≤106 and ai≠0).

Output
If there is no valid partition, print −1. Otherwise, print any valid partition in the following format:

On the first line print the number d of days (1≤d≤n).
On the second line, print d integers c1,c2,…,cd (1≤ci≤n and c1+c2+…+cd=n), where ci is the number of events in the i-th day.
If there are many valid solutions, you can print any of them. You don’t have to minimize nor maximize the number of days.

Examples
inputCopy
6
1 7 -7 3 -1 -3
outputCopy
1
6
inputCopy
8
1 -1 1 2 -1 -2 3 -3
outputCopy
2
2 6
inputCopy
6
2 5 -5 5 -5 -2
outputCopy
-1
inputCopy
3
-8 1 1
outputCopy
-1
Note
In the first example, the whole array is a valid day.

In the second example, one possible valid solution is to split the array into [1,−1] and [1,2,−1,−2,3,−3] (d=2 and c=[2,6]). The only other valid solution would be to split the array into [1,−1], [1,2,−1,−2] and [3,−3] (d=3 and c=[2,4,2]). Both solutions are accepted.

In the third and fourth examples, we can prove that there exists no valid solution. Please note that the array given in input is not guaranteed to represent a coherent set of events.

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
set<int> v,s;
int cnt,a[N],x,n;
int main()
{cin>>n;int f=1;for(int i=1;i<=n;i++){cin>>x;if(!s.size()) v.clear(),++cnt;if(x>0&&!s.count(x)&&!v.count(x))  s.insert(x),v.insert(x);else if(x<0&&s.count(-x)) s.erase(-x);else  f=0;a[cnt]++;}if(f==0||s.size()) {puts("-1");return 0;}else{cout<<cnt<<endl;for(int i=1;i<=cnt;i++) cout<<a[i]<<" ";cout<<endl;}
}

B. Silly Mistake相关推荐

  1. 分享成为高效程序员的7个重要习惯

    作者:Phil Chu 作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友.这里的"高效",我指的是按时完符合要求的项目 ...

  2. 要记住的Facepalm:我在未先测试SDK的情况下对其进行了改进。

    by Rahul Chowdhury 通过拉胡尔·乔杜里 要记住的Facepalm:我在未先测试SDK的情况下对其进行了改进. (A Facepalm to Remember: I bumped up ...

  3. 在CSS中使用not:first-child选择器

    Introduction: 介绍: Well, selectors are a very common term to deal with while we are developing a webs ...

  4. What's New in C# 6.0(转)

    原文地址:http://www.codeproject.com/Tips/1023426/Whats-New-in-Csharp 本来想翻译一下贴出来,但是好像很多语言组织起来比较困难,读书少不会表达 ...

  5. 英语3500词(五)Who is Your Favorite Athlete (2022.1.17)

    athlete 1 n. 运动员,擅长运动的人 athletic 1 adj. 体育运动的,健壮的 用法搭配 an athletic man 健壮的男子 sports meeting = athlet ...

  6. 《高效的项目和团队》

    Productive Projects and Teams是一本好书. 许多其中许多关于管理和沟通的精辟言论让我大有相见很晚之感.其实不仅是软件的开发项目,任何项目,甚至任何行业的管理,都首先是对人的 ...

  7. Deep Learning Trends @ ICLR 2016:深度学习趋势@ICLR2016(译)

    Preface   这是一篇译文,原文作者是Tomasz Malisiewicz大神,这是他在博客Tombone's Computer Vision Blog的文章,一发出来就引起这个圈子的广泛关注. ...

  8. 阅读_分享成为高效程序员的7个重要习惯

    Tags:优化编程,把工作当真,理解代码,理解需求,高效程序员 作者:Phil Chu 作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友. ...

  9. Data Visualization – Banking Case Study Example (Part 1-6)

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  10. python3 搜索附近蓝牙

    本来想用java写,奈何java太繁琐,python 功能包真丰富啊 依赖包 pip install -i https://mirrors.aliyun.com/pypi/simple/ pyblue ...

最新文章

  1. Linux添加用户组和添加用户
  2. layui select 与 vue 的结合使用
  3. 编译 | 5G时代的游戏世界:一年后的AR与VR将会发生的几个变化
  4. 如何用tadodataset.append
  5. linux生成公钥实现ssh,linux下生成 SSH 公钥,用于GitHub
  6. Allegro 关闭与显示网络飞线
  7. unity快捷放置物体操作
  8. 信息学奥赛一本通C++语言——1030: 计算球的体积
  9. 计算机网络——OSI参考模型和TCP/IP协议
  10. python编程多行输入_Python20-02_GUI编程----Text多行文本框详解
  11. 【科研论文】基于HTTP协议的嵌入式远程监控系统的研究
  12. linux 链表头文件,Linux下单链表的实现
  13. Try Microsoft AutoCollage 2008
  14. 反编译工具Depends---dll和exe反编译工具
  15. 伽罗华域, 二维码和CRC
  16. Wallpaper Engine壁纸推荐,让程序猿的桌面优美起来
  17. AriaNg 是一个让 aria2 更容易使用的现代 Web 前端
  18. PMP第六版_1~3章
  19. c#实现winform关机代码
  20. 【电脑讲解】电脑D盘不见了怎么恢复

热门文章

  1. python编程招生海报_怎么用ps做招生海报
  2. 简历职称 计算机,个人简历专业技术职务怎么填 就是你所学的专业技术是你取得...
  3. 利用PaddleDetection 训练自定义VOC数据集进行目标检测
  4. 新一代HTAP数据库崛起,MySQL生态的最佳归宿?
  5. navicat导入.mdf文件到远程sqlserver数据库
  6. flash for linux安装教程,Flash Player 9 FOR Linux 的安装
  7. 掠过和记黄埔IDC机房
  8. 第25章 串行FLASH文件系统FatFs—零死角玩转STM32-F429系列
  9. ping-pong buffer
  10. 明日之后在同一个服务器找不到人,明日之后怎么跨区加好友 看这里