zoukankan      html  css  js  c++  java
  • D. Let's Go Hiking

    Codeforces Round #706 (Div. 2)

    首先保证x落点峰顶

    然后讨论最长上升或下降那一段的情况(否则,y走比x长的段就能赢)

    讨论升降长度相等 不等 各自的奇数长度、偶数长度的情况

    发现只有最长升降那段,升长等于降长且长度都为奇数才能输出1

    其他情况输出0

    讨论结束

    赛后才会做,代码明天上课写

    菜死了=  =

    #include<bits/stdc++.h>
    #define inf 0x3f3f3f3f
    #define ll long long
    #define MAX 1000001
    const ll N = 2e5+7;
    const ll mod = 1e9+7;
    using namespace std;
    ll n,L[N],R[N],a[N];//L升  R降 
    int main(){
        scanf("%lld",&n);
        for(int i=1;i<=n;++i)    scanf("%lld",&a[i]);
        //求各段升的长度 
        L[1]=1; 
        for(int i=2;i<=n;++i){
            if(a[i]>a[i-1])    L[i]=L[i-1]+1;
            else            L[i]=1;
        }
        //求各段降的长度 
        R[n]=1; 
        for(int i=n-1;i>=1;--i){
            if(a[i]>a[i+1])    R[i]=R[i+1]+1;
            else            R[i]=1;
        }
        //找出最长段长度
        ll maxx=-1;
        for(int i=1;i<=n;++i){
            maxx=max(maxx,max(L[i],R[i]));
        }
        //
        int flag=0,cnt=0,pos=0;
        for(int i=1;i<=n;++i){
            if(maxx==L[i]&&maxx==R[i])    cnt++;//峰左右都为最长段 只记一次 
            else if(maxx==L[i])    cnt++;    //记录最长段个数 
            else if(maxx==R[i])    cnt++;
            
            if(pos==0){
                if(L[i]==maxx||R[i]==maxx)    pos=i;
            }
        }
        if(cnt>1){
            flag=0;
        }
        else{
            if(L[pos]==R[pos]&&L[pos]%2==1)    flag=1;
        }
        if(flag)    printf("1
    ");
        else        printf("0
    ");
        return 0;   
    }
    View Code
  • 相关阅读:
    Window7下手动编译最新版的PCL库
    C和C++中的异常处理
    队列之卡片游戏
    C/C++笔记
    最真的梦——文/林清玄
    库函数与系统调用的区别
    hdu2653之BFS
    使用ffmpeg+crtmpserver搭建文件的伪直播
    ZOJ3705:Applications
    c_c++基础问题(平时读书时笔记)
  • 原文地址:https://www.cnblogs.com/PdrEam/p/14514965.html
Copyright © 2011-2022 走看看