奶牛排队 (Standard IO)

本文介绍了一个关于寻找符合条件的最长连续奶牛序列的问题。给定一系列奶牛的身高,需找出一个子序列,该序列中最左侧的奶牛是最矮的,最右侧的是最高的,且中间的奶牛身高既不等于最矮也不等于最高。通过一个简单的暴力算法解决此问题,并给出了具体的实现代码。

题意/Description:

       奶牛在熊大妈的带领下排成了一条直队。
  显然,不同的奶牛身高不一定相同。。。。。
  现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,中间如果存在奶牛,则身高不能和A,B奶牛相同。问这样的奶牛最多会有多少头?
  从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是0,2,但不会是1)。

 

读入/Input

       第一行一个数N(2<=N<=100000),表示奶牛的头数。
  接下来N个数,每行一个数,从上到下表示从左边到右奶牛的身高(1<=身高<=maxlongint)。

 

输出/Output

        第一行,表示最多奶牛数。

 

题解/solution

       就是一个优美的暴力。

 

代码/Code

 

var
  n,maxx:longint;
  a:array [0..100001] of longint;
procedure init;
var
  i:longint;
begin
  readln(n);
  for i:=1 to n do
    readln(a[i]);
  maxx:=0;
end;

function max(o,p:longint):longint;
begin
  if o>p then exit(o);
  exit(p);
end;

procedure main;
var
  i,j,k:longint;
  bo:boolean;
begin
  for i:=n downto 1 do
    begin
      for j:=i-1 downto 1 do
        begin
          if a[i]<=a[j] then break;
	  bo:=true;
          for k:=j+1 to i-1 do
            if (a[k]<=a[j]) or (a[k]>=a[i]) then
              begin
                bo:=false;
		break;
              end;
          if bo then
            begin
              maxx:=max(maxx,i-j+1);
              if maxx=n then
                begin
		  write(n);
		  exit;
                end;
	    end;
	end;
    end;
  write(maxx);
end;

begin
  init;
  main;
end.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值