• SAC E#1


    题目背景

    小强和阿米巴是好朋友。

    题目描述

    小强很喜欢数列。有一天,他心血来潮,写下了一个数列。

    阿米巴也很喜欢数列。但是他只喜欢其中一种:波动数列。

    一个长度为n的波动数列满足对于任何i(1 <= i < n),均有:

    a[2i-1] <= a[2i] 且 a[2i] >= a[2i+1](若存在) 或者

    a[2i-1] >= a[2i] 且 a[2i] <= a[2i+1](若存在)

    阿米巴把他的喜好告诉了小强。小强便打算稍作修改,以让这个数列成为波动数列。他想知道,能否通过仅修改一个数(或不修改),使得原数列变成波动数列。

    输入输出格式

    输入格式:

    输入包含多组数据。

    每组数据包含两行。

    第一行一个整数n表示数列的长度。

    接下来一行,n个整数,表示一个数列。

    输出格式:

    对于每一组输入,输出一行Yes或No,含义如题目所示。

    输入输出样例

    输入样例#1:
    5
    1 2 3 2 1
    5
    1 2 3 4 5
    
    输出样例#1:
    Yes
    No

    说明

    对于30%的数据,n <= 10

    对于另外30%的数据,m <= 1000

    对于100%的数据,n <= 10^5,m <= 10^9

    其中m = max|a[i]|(数列中绝对值的最大值)

    模拟水题

    只有两种情况:先上升还是先下降

    判断不满足条件的数量要不大于1

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,cnt,flag1,flag2,dir;
     7 int a[100001];
     8 int main()
     9 {int i;
    10   while (cin>>n)
    11     {
    12       for (i=1;i<=n;i++)
    13     {
    14       scanf("%d",&a[i]);
    15     }
    16       flag1=1;
    17       dir=0;cnt=0;
    18       for (i=2;i<=n;i++,dir=!dir)
    19     {
    20       if (a[i]!=a[i-1]&&(a[i]>a[i-1])!=dir)
    21         if (++cnt>1) {flag1=0;break;}
    22         else i++,dir=!dir;
    23     }
    24       flag2=1;
    25       dir=1;cnt=0;
    26       for (i=2;i<=n;i++,dir=!dir)
    27     {
    28       if (a[i]!=a[i-1]&&(a[i]>a[i-1])!=dir)
    29         if (++cnt>1) {flag2=0;break;}
    30         else i++,dir=!dir;
    31     }
    32       if (flag1||flag2) cout<<"Yes
    ";
    33       else cout<<"No
    ";
    34     }
    35 }

  • 相关阅读:
    codevs1028 花店橱窗布置
    bzoj1497 [NOI2006]最大获利 (最大闭合权图)
    扩展欧几里得算法总结
    codevs1033 蚯蚓的游戏问题
    bzoj1001狼抓兔子
    CSS3中的选择器
    LESS快速入门
    怎样让老浏览器兼容html5新标签
    http与https差异
    css3中的radius
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7635674.html
Copyright © 2020-2023  润新知