B. Silly Mistake

题目大意:

首先定义有效的一天:

每一个不同的数字只能进去一次,出来一次,正数代表进去,负数代表出来

每一个人不能过夜

不合理:

一个数字只有进去,或者只有出来则是无效的

给你一个数组,让你把数字分成若干个有效天,不要求最大化这个天数,也不要求最小化这个天数,

问怎么划分,如果无法划分则输出-1

题目思路:

这个题目我觉得不是很简单,反正我写的比较吃力

首先我们要模拟这个进入和出去,则可以用一个bool数组,为真则是进去,为假则是出去。

其次我们要判断是不是同一天,用一个ptr来表示上一天的最后一天,一个last数组来表示上一对数的最后一天的位置,如果有两个数放在了同一天,则判断无法划分

再而我们要判断这一段划分出来的数组是不是一一对应,这个则有tot,tot+表示进去,tot-表示出去,如果tot==0 则表示划分出去的一段是一一对应的。

因为不要求划分天数尽量小,所以可以tot==0则划分一次,ptr相应进行改变。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long ll;
const int M=1e6;
const int maxn = 1e6 + ; bool in[maxn];
int last[maxn]; vector<int>ans; void fail(){
printf("-1\n");
exit();
}
//正负一对,以负的结尾
int main(){
int n,ptr=,tot=;//ptr记录上一次截断的位置,tot记录这个时候是否成对的出现
scanf("%d",&n);
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
if(x>){
if(in[x]) fail();//如果之前进入了,现在继续进入是不对的
if(last[x]>ptr) fail();//这个是判断上一对是否和这一对会在一天,如果ptr<last[x],则说明在同一天
in[x]=;//表示这个进入
tot++;//表示对数+1
}
else {
x=abs(x);
if(!in[x]) fail();//如果从未进入过,则不能出去
tot--;//合并
in[x]=;//表示已经出去
last[x]=i;//表示这一对的结束位置,便于后面ptr的判断
}
if(tot==){
ans.push_back(i-ptr);//这个题目不要求最少的天数,所以直接加上去就可以了
ptr=i;//ptr更新
}
}
if(tot>) fail();
printf("%d\n",ans.size()*);
for(int i=;i<ans.size();i++) printf("%d ",ans[i]);
printf("\n");
return ;
}

B. Silly Mistake Codeforces Round #600 (Div. 2)的更多相关文章

  1. 【cf比赛记录】Codeforces Round #600 (Div. 2)

    Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...

  2. Codeforces Round #600 (Div. 2) E. Antenna Coverage

    Codeforces Round #600 (Div. 2) E. Antenna Coverage(dp) 题目链接 题意: m个Antenna,每个Antenna的位置是\(x_i\),分数是\( ...

  3. Codeforces Round #600 (Div. 2)

    传送门 A. Single Push 直接乱搞即可. Code /* * Author: heyuhhh * Created Time: 2019/11/16 22:36:20 */ #include ...

  4. Codeforces Round #600 (Div. 2) B. Silly Mistake

    #include<iostream> #include<map> #include<set> #include<algorithm> using nam ...

  5. Codeforces Round #600 (Div. 2) - B. Silly Mistake(模拟)

    题意:有一个公司,每天有员工进出,$a[i]>0$时表示$a[i]$这个员工进入公司,$a[i]<0$时表示$-a[i]$这个员工出公司,公司对进出办公室有一些严格的规定 员工每天最多只能 ...

  6. Codeforces Round #600 (Div. 2)E F

    题:https://codeforces.com/contest/1253/problem/E 题意:给定n个信号源,俩个参数x和s,x代表这个信号源的位置,s代表这个信号源的波及长度,即这个信号源可 ...

  7. Codeforces Round #600 (Div. 2) D题【并查集+思维】

    题意:给你n个点,m条边,然后让你使得这个这个图成为一个协和图,需要加几条边.协和图就是,如果两个点之间有一条边,那么左端点与这之间任意一个点之间都要有条边. 思路:通过并查集不断维护连通量的最大编号 ...

  8. Codeforces Round #600 (Div. 2) D。 Harmonious Graph

    #include<iostream> using namespace std ; ; int p[N]; int cnt; int find(int x) { if(p[x]!=x) p[ ...

  9. Codeforces Round #600 (Div. 2) C - Sweets Eating

    #include<iostream> #include<algorithm> #include<cstring> using namespace std ; typ ...

随机推荐

  1. 【Selenium04篇】python+selenium实现Web自动化:文件上传,Cookie操作,调用 JavaScript,窗口截图

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第四篇博 ...

  2. mysql的事务四个特性以及事务的四个隔离级别

    一.事务四大属性 分别是原子性.一致性.隔离性.持久性. 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库, ...

  3. java解惑之常常忘记的事

    java解惑之常常忘记的事 2012-10-17 18:38:57|  分类: JAVA |  标签:基础知识  软件开发  |举报|字号 订阅     针对刚接触java的菜鸟来说,java基础知识 ...

  4. docker深入学习

    docker深入学习 一.容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+D ...

  5. stand up meeting 12/28/2015

    part 组员                今日工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云   解决生词本显示[阅读页面]的滑动条和PDF的滑动条冲突 ...

  6. Xor Path 牛客,HPU--C--LCA

    题解: 题目要求求出u和v两点在最短路径上的异或和.怎么确定最短路径呢?,就是U到LCA(u,v)的路径加上V到LCA(u,v).根据异或的性质,如k^a^a=k,即异或一个值两边等于原数值. 所以维 ...

  7. samba 客户端工具 smbclient和samba挂载到本地

    smbclient命令属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源. 安装 yum install -y samba-client 常用参数 -c<命令> ...

  8. Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊

    分析: 聊天室需要多个客户端和一个服务端. 服务端负责转发消息. 客户端可以发送消息.接收消息. 消息分类: 群聊消息:发送除自己外所有人 私聊消息:只发送@的人 系统消息:根据情况分只发送个人和其他 ...

  9. Ubuntu中设置共享文件夹

    1,设备--->共享文件夹--->共享文件夹 2,小加号---->添加路径(自己设置主机上任意的路径)--->设置名称(我的是gx)---->选中自动挂载和固定分配--- ...

  10. Net core项目实战篇01---EFCore CodeFirs For Mysql 数据库初始化

    从今天开始我们用Net Core进行项目实战,采用微服务构架,因此你会看到我各模块开始都是用的web api.项目中的代码直接可以复制.费话不多说,现在就来跟我一起开始吧! 1.打开VS2017—&g ...