zoukankan      html  css  js  c++  java
  • [BZOJ 3152] 组合子逻辑

    Link:

    BZOJ 3152 传送门

    Solution:

    喜闻乐见,gyz出的语文题,题意要看半小时

    题意:使用最少的括号将序列分割,对于每个括号中的序列,设最左边的数为$num$,序列中元素个数为$cnt$,

    要保证:$num>=cnt$(括号括起来后算作一个元素)。一开始一个括号包含$[1,n]$。

    由于一开始有一个括号包含$[1,n]$,

    从头贪心即可,维护还能扩展的个数以及当前最大值

    Note:注意对$n=1$的特殊处理

    Code:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    inline int read()
    {
        char ch;int num,f=0;
        while(!isdigit(ch=getchar())) f|=(ch=='-');
        num=ch-'0';
        while(isdigit(ch=getchar())) num=num*10+ch-'0';
        return f?-num:num;
    }
    
    int T,n,x,dat[2000005];
    
    int main()
    {
        T=read();
        while(T--)
        {
            n=read();priority_queue<int> que;
            if(n==1){puts((read())?"0":"-1");continue;}
            for(int i=1;i<=n;i++) dat[i]=read();
            
            int k=dat[1]-1,res=1;
            for(int i=2;i<=n;i++)
            {
                if(k){k--;que.push(dat[i]);continue;}
                
                if(que.empty() || que.top()<2){res=-1;break;}
                res++;k=que.top()-2;que.pop();que.push(dat[i]);
            }
            printf("%d
    ",res);
        }
        return 0;
    }
  • 相关阅读:
    根据坐标点画图形
    js 解析geojson格式
    devexpress 安装
    DataTable 获取列名
    ADO.NET 注册
    css:outline
    javascript函数sort
    引用类型-2015/10/06
    2015-11-02-js
    jquery
  • 原文地址:https://www.cnblogs.com/newera/p/9131045.html
Copyright © 2011-2022 走看看