码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-13 16:05:26      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:奇数   stream   blank   证明   注意事项   can   自己   lan   logs   

原题传送门

这是道很奇怪的题目,真不知道为什么要放到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);
}

 

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

标签:奇数   stream   blank   证明   注意事项   can   自己   lan   logs   

原文地址:http://www.cnblogs.com/ghostfly233/p/6849039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!