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

花匠(codevs 3289)题解

时间:2015-05-29 15:27:45      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

【问题描述】

花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致。
具体而言,栋栋的花的高度可以看成一列整数h_1, h_2, … , h_n。设当一部分花被移走后,剩下的花的高度依次为g_1, g_2, … , g_m,则栋栋希望下面两个条件中至少有一个满足:
条件 A:对于所有的1<i<m/2,g_2i > g_2i-1,且g_2i > g_2i+1; 
条件 B:对于所有的1<i<m/2,g_2i < g_2i-1,且g_2i < g_2i+1。
注意上面两个条件在m = 1时同时满足,当m > 1时最多有一个能满足。
请问,栋栋最多能将多少株花留在原地。

【样例输入】

    5 
    5 3 2 1 2

【样例输出】

    3

【解题思路】

     本题为NOIP2013提高组day2第二题,本人认为该题应该是第一题的难度……之所以放在第二题,也许是因为条件写得丑了点怕别人看不清。看清条件这道题就很简单了。

     这个条件的意思就是让你找转折点的数量即g(i-1)<gi>g(i+1)或g(i-1)>gi<g(i+1),gi即是转折点。

     首先可以肯定的是,当花的数目为1的时候,可以直接输出1。首尾两株花都肯定是可以留下的,因此,当花的数目大于等于2时,我们可以将答案初始化为2,然后加上转折点的数目即可,代码没超过25行……

【代码实现】

var a:array[0..100001] of longint;
    w,n,i,ans:longint;
begin
 readln(n);
 a[0]:=-maxlongint;
 for i:=1 to n do
  begin
   inc(w);
   read(a[w]);
   if a[w]=a[w-1] then
    dec(w);
  end;
 if w=1 then
  begin
   writeln(1);
   halt;
  end;
 ans:=2;
 for i:=2 to w-1 do
  if ((a[i]>a[i-1])and(a[i]>a[i+1]))or((a[i]<a[i-1])and(a[i]<a[i+1])) then
   inc(ans);
 writeln(ans);
end.

 

花匠(codevs 3289)题解

标签:

原文地址:http://www.cnblogs.com/PengBoLiuXu/p/4538499.html

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