• 花匠(NOIP2013)(神奇纯模拟)


    原题传送门

    这是道很奇怪的题目,真不知道为什么要放到T2。

    也许是T1太水了

    首先先看题,

    题目要求一个数列中下标为偶数的点比临近的下表为奇数的点更大或更小

    其实就是说在原数组中找到一个最长的波动数列,就是小大小大小大。。。或者大小大小大小

    网络上的题解都写的奇奇怪怪,有的用递归,有的用贪心。。

    其实没有那么麻烦。 我们假设从第一个数之后开始所有的点都是拐点。

    然后就设一个BOOL 如果bool=1那么就判断a[i]>a[i-1]如果满足ans++;bool=0;

    如果bool=0那么就判断a[i]<a[i-1]如果满足ans++;bool=1;

    如果a[i]=a[i-1]那么a[i]一定不会纳入答案中、。

    最后要把ans+1因为第一个点一定要纳入答案。(具体自己贪心证明。。)

    所以。。纯模拟就好啦。。

    好吧,没有注意事项。

    这么简短的代码都20ms膜拜用了读入优化和输出优化的zxyer(才用了4ms%%%%)

    下面贴代码

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,a,b,ans=0,k=0;
    int main(){
        scanf("%d%d",&n,&a);
        for(int i=2;i<=n;i++)
        {
            scanf("%d",&b);
            if(b>a&&k!=1)k=1,ans++;
            if(b<a&&k!=2)k=2,ans++;
            a=b;
        }
        printf("%d",ans+1);
    }
  • 相关阅读:
    IDEA service/DashBoard 不显示服务端口号
    是否同一棵二叉搜索树
    Tree Traversals Again
    有符号数移位
    tl431基准的用法
    7寸屏电压方案
    test
    合并commit
    重命名commit
    Git 在公司内部的使用规范
  • 原文地址:https://www.cnblogs.com/ghostfly233/p/6849039.html
Copyright © 2020-2023  润新知