B. Silly Mistake

题目大意:

首先定义有效的一天:

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

每一个人不能过夜

不合理:

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

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

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

题目思路:

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

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

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

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

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

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <queue>
  5. #include <vector>
  6. #include <string>
  7. #include <algorithm>
  8. #include <iostream>
  9. #include <map>
  10. #include <cmath>
  11. #define inf 0x3f3f3f3f
  12. #define inf64 0x3f3f3f3f3f3f3f3f
  13. using namespace std;
  14. typedef long long ll;
  15. const int M=1e6;
  16. const int maxn = 1e6 + ;
  17.  
  18. bool in[maxn];
  19. int last[maxn];
  20.  
  21. vector<int>ans;
  22.  
  23. void fail(){
  24. printf("-1\n");
  25. exit();
  26. }
  27. //正负一对,以负的结尾
  28. int main(){
  29. int n,ptr=,tot=;//ptr记录上一次截断的位置,tot记录这个时候是否成对的出现
  30. scanf("%d",&n);
  31. for(int i=;i<=n;i++){
  32. int x;
  33. scanf("%d",&x);
  34. if(x>){
  35. if(in[x]) fail();//如果之前进入了,现在继续进入是不对的
  36. if(last[x]>ptr) fail();//这个是判断上一对是否和这一对会在一天,如果ptr<last[x],则说明在同一天
  37. in[x]=;//表示这个进入
  38. tot++;//表示对数+1
  39. }
  40. else {
  41. x=abs(x);
  42. if(!in[x]) fail();//如果从未进入过,则不能出去
  43. tot--;//合并
  44. in[x]=;//表示已经出去
  45. last[x]=i;//表示这一对的结束位置,便于后面ptr的判断
  46. }
  47. if(tot==){
  48. ans.push_back(i-ptr);//这个题目不要求最少的天数,所以直接加上去就可以了
  49. ptr=i;//ptr更新
  50. }
  51. }
  52. if(tot>) fail();
  53. printf("%d\n",ans.size()*);
  54. for(int i=;i<ans.size();i++) printf("%d ",ans[i]);
  55. printf("\n");
  56. return ;
  57. }

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. 原生js俄罗斯方块

    效果图 方块定位原理通过16宫格定位坐标,把坐标存到数组中去 [ [[2,0],[2,1],[2,2],[1,2]],//L [[1,1],[2,1],[2,2],[2,3]], //左L [[2,0 ...

  2. 本地项目推送到Github

    1.在github上repositories新建一个git项目工程 2.使用git,把刚建好的项目clone到本地 3.把本地项目中的文件全部移动到下载下来的git项目中,以下是我本地项目中的文件 4 ...

  3. MySQL 5.7.18 zip 文件安装过程

    安装最新MySQL:5.7.18 1.下载路径 https://dev.mysql.com/downloads/mysql/ 有账号登陆下载, 没有账号:no thanks;just start my ...

  4. getline()和get()的使用区别

    一.getline和get()的使用区别: 首先这两个函数都读取下一行输入,直到到达换行符:但是getline()函数会丢弃换行符,而get()将换行符保留在输入序列中 二.getline()函数的使 ...

  5. Jquery+php鼠标滚动到页面底部自动加载更多内容,使用分页

    1.index.php <style type="text/css"> #container{margin:10px auto;width: 660px; border ...

  6. 告诉你那里最受欢迎,python爬取全国13个城市旅游数据

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  7. C# 基础知识系列- 11 委托和事件

    0. 前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分.出现事件的地方,必然有委托出现:而委托则不一定会有事件出现.那为什么会出现这样的关系呢?这就需要从事件和委托的定义出发,了解其中的 ...

  8. 7.关于一些dom&&获取元素

    1. 测试点击的是否是span 标签 <span onClick={this.select.bind(this)}>点击</span>   select( e ){  cons ...

  9. 《Spring In Action》阅读笔记之核心概念

    DI 依赖注入:在xml中配置的bean之间的依赖关系就是依赖注入 AOP 面向切面编程:如在xml中定义某个方法为切点,然后配置在该切点(该方法)调用前后需要调用的方法,从而简化了代码并解耦. Sp ...

  10. Redis的三大问题

    一般我们对缓存读操作的时候有这么一个固定的套路: 如果我们的数据在缓存里边有,那么就直接取缓存的. 如果缓存里没有我们想要的数据,我们会先去查询数据库,然后将数据库查出来的数据写到缓存中. 最后将数据 ...