首页 > 其他分享 >题解 CF1253B

题解 CF1253B

时间:2022-11-30 09:11:59浏览次数:40  
标签:cnt ch 题解 vis CF1253B date include out

题解 CF1253B

这个题是一个模拟题

只需要注意几点:

1. 同一天同一个人只能进入一次

2. 同一天同一个人只能出去一次

3. 一天中一个人没进来就不能出去

然后我们用 vis 数组维护每个人进入的日期,用 out 数组维护每个人出去的日期

如果一个人是今天进来的,又进来一次,不合法

如果一个人是今天进来的,今天出去的,又出去一次,不合法

如果一个人今天没进来,今天出去的,不合法

ps: vis 数组和 out 数组都要开 a 的值域大小,不然会 RE ,同时注意是负数的时候,下标为其相反数

// #Tyrue#
#include<map>
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}
const int N=1e6+10;
int T,n,date=1,tot,cnt;
int a[N],vis[N],p[N],out[N];
int main(){
    n=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
    }
    for(int i=1;i<=n;i++){
        if(a[i]>0){
        	if(vis[a[i]]==date){
				puts("-1");
            	return 0;
            }
            vis[a[i]]=date;
            cnt++;
        }else{
            if(vis[-a[i]]==date && out[-a[i]]!=date){
                cnt--;
                out[-a[i]]=date;
            }else{
                puts("-1");
                return 0;
            }
        }
        if(!cnt){
            p[++tot]=i;
            date++;
        }
    }
    if(cnt){
        puts("-1");
        return 0;
    }
    printf("%d\n",tot);
    for(int i=1;i<=tot;i++){
        printf("%d ",p[i]-p[i-1]);
    }
    return 0;
}

标签:cnt,ch,题解,vis,CF1253B,date,include,out
From: https://www.cnblogs.com/Tyrue-blog/p/16937375.html

相关文章

  • 题解 CF1711B
    题解CF1711B这个题说明了,蛋糕的个数只跟好友的对数有关,跟去的人或者是单个的人的个数是无关的(是不是单个的人去没有蛋糕吃)所以我们就要考虑,怎样才能满足吃掉的蛋糕正好......
  • 题解 CF1740D
    CF1740D这个题说实话比\(C\)题要好想/jk,但是我没有在考场上写出来,写出来了但是没交上这个题只需要记录一下终点当前时刻,需要放置下标的棋子(姑且叫它棋子),以及当前棋盘上......
  • Codeforces Round #836 (Div. 2) A-D题解
    比赛链接A、SSeeeeiinnggDDoouubbllee一个字符串的每个字母翻倍,且没有其他限制。所以把字符串正着输一遍,再倒叙输出一遍即可。点击查看代码#include<bits/stdc++.h>......
  • 【题解】 P8287 「DAOI R1」Flame
    题面传送门解决思路本题解是对这篇题解部分内容的补充,讨论的是两种\(\mathcal{O(m\logn)}\)的做法。大体思路都是一样的,先预处理出每一条边需要多少时间后才能连......
  • 2022 ICPC 济南站 L 题题解
    题意给定一棵\(n\)个点有边权的无根树,有\(q\)次询问,每次给定\(l,r\),求\[\min_{l\leu<v\ler}\{\operatorname{dist}(u,v)\}.\]数据范围:\(1\len\le2\times10^5......
  • 「题解」Codeforces 1765L Project Manager
    写了两个小时写吐了,你告诉我这玩意2400?如果不管假期的话,那么每一周必然会有一个项目跟进一次进度。那么答案就是线性的。即使有假期的存在也没关系,每个假期顶多就只会拖......
  • angular FormArray 中嵌套 FormGroup 问题解决
    官方例子里说了FormArray可以嵌套group或者array,但只给了control的实例,这里记录一下嵌套groupts文件:import { Component } from '@angular/core';import { For......
  • NOIP 2022 题解
    rp++juruo的noip真实成绩:0+0+0+0=0pts.题目大意洛谷有,这里就不放了。T1.种花可以维护每一个点向下最多延伸多长$xia_i$,向右延伸最多多长$you_i$,这样C就好求了,可以维......
  • 题解 P4448
    如果这不是一道原题,这道题出的还不错,是个比较毒瘤的数数。由于我太菜了反正我自己没有做出来后面的dp,zyf巨佬教的。不过听说合肥六中某巨佬当年也没做出来,平衡了雾但问......
  • AT_otemae2019_a 寝坊だ!ピ太郎! (You overslept, Pitaro) 题解
    题目大意:给出两个数 a,b 如果 a+0.5>b,输出 1,否则输出 0。a,b 均为整数。思路:这是一道模拟题,模拟即可。代码:注意:要开浮点型!#include<bits/stdc++.h>using......