zoukankan      html  css  js  c++  java
  • NC13134 牛牛的数列(分类讨论)

    链接:https://ac.nowcoder.com/acm/problem/13134
    来源:牛客网

    牛牛现在有一个n个数组成的数列,牛牛现在想取一个连续的子序列,并且这个子序列还必须得满足:最多只改变一个数,就可以使得这个连续的子序列是一个严格上升的子序列,牛牛想知道这个连续子序列最长的长度是多少。

    // Problem: 牛牛的数列
    // Contest: NowCoder
    // URL: https://ac.nowcoder.com/acm/problem/13134
    // Memory Limit: 65536 MB
    // Time Limit: 2000 ms
    // 
    // Powered by CP Editor (https://cpeditor.org)
    
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+100;
    int n,a[maxn];
    vector<pair<int,int> > p;
    int main () {
        scanf("%d",&n);
        for (int i=1;i<=n;i++) scanf("%d",a+i);
        for (int i=1;i<=n;i++) {
            int j;
            for (j=i+1;j<=n;j++) if (a[j]<=a[j-1]) break;
            p.push_back(make_pair(i,j-1));
            i=j-1;
        }
        int ans=0;
        //for (int i=0;i<p.size();i++) printf("%d %d
    ",p[i].first,p[i].second);
        for (int i=1;i<p.size();i++) {
            if (p[i-1].second+1==p[i].first) {
                if (p[i-1].second==p[i-1].first||a[p[i].first]>a[p[i-1].second-1]+1) {
                    ans=max(ans,p[i].second-p[i].first+1+p[i-1].second-p[i-1].first+1);
                }    
                if (p[i].second==p[i].first||a[p[i].first+1]>a[p[i-1].second]+1) {
                    ans=max(ans,p[i].second-p[i].first+1+p[i-1].second-p[i-1].first+1);
                }
            }
            else if (p[i-1].second+2==p[i].first) {
                if (a[p[i].first]>a[p[i-1].second]+1) {
                    ans=max(ans,p[i].second-p[i].first+1+p[i-1].second-p[i-1].first+1+1);
                }
            }
        }
        printf("%d
    ",ans);
    }
  • 相关阅读:
    松翰单片机_SN8F570310——INTR
    松翰单片机_SN8F570310——EINT
    松翰单片机_SN8F570310——PWM
    松翰单片机_SN8F570310——SPI
    松翰单片机_SN8F570310——IIC
    松翰单片机_SN8F570310——UART
    全志_input
    全志_ADC驱动
    git随笔
    全志_外部中断
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/14486901.html
Copyright © 2011-2022 走看看