奶牛排队

题意

【问题描述】

奶牛在熊大妈的带领下排成了一条直队。

显然,不同的奶牛身高不一定相同……

现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A 是最矮的,最右边的B 是最高的,且B 高于A 奶牛,

且中间如果存在奶牛,则身高不能和A、B 奶牛相同,

问这样的一些奶牛最多会有多少头。

从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是零、二,但不会是一)。

【输入格式】

第一行一个数N(2<=N<=100000),表示奶牛的头数。

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

【输出格式】

一行,表示最多奶牛数。

【输入样例】Tahort.in

5

1

2

3

4

1

【输出样例】Tahort.out

4

【样例解析】

取第1 头到第4 头奶牛,满足条件且为最多。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我实在是太弱了

题意都看错了

在最矮的奶牛和最高的奶牛之间的奶牛 高度可以是打乱的

而我

按照严格上升来做的

(竟然也水到了20分)

真是ggg

大佬说

这是个模拟qwq

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn = 100010;
int n,ans;
int v[maxn],que[maxn];//v[i]就是奶牛的高度,que[i]表示以i为结尾最长队列 

int main()
{
    scanf("%d",&n);
    for(int i = 1;i <= n;i++)
        scanf("%d",&v[i]);
    for(int i = 1;i <= n;i++)//遍历以每个奶牛为结尾的最长队列
    {
        int id = i - 1,j = i - 1;
        while(j)
        {
            if(v[j] >= v[i])
                break;
            //如果i奶牛前面的奶牛比i奶牛高,那么i奶牛一定无法合并到前面的队列中,那么当前的最长的队列,还和以前的一样
            if(v[que[j] + 1] < v[id + 1])
                id = que[j];
                //在j<i且以j为结尾的队列的开头小于以i为结尾的队列的开头时,两队列可以合并
            j = que[j];
            //向前找前一个(未合并的)队列
        }
        que[i] = id;
        ans = max(ans , i - id);
    }
    if(ans == 1)
        ans = 0;
    printf("%d",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/darlingroot/p/10759814.html

时间: 2025-01-17 12:52:41

奶牛排队的相关文章

NOIP2012模拟试题 121105【奶牛排队(tahort)

3.奶牛排队(tahort) [ 问题描述] 奶牛在熊大妈的带领下排成了一条直队. 显然,不同的奶牛身高不一定相同…… 现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,中间如果存在奶牛,则身高不能和A.B奶牛相同.问这样的奶牛最多会有多少头? 从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是0,2,但不会是1). [输入] 第一行一个数N (2≤N≤l00000),表示奶牛的头数. 接下来N个数,每行一个数,从上到下

笔试算法题目,奶牛排队喝水

import java.util.*; /**  * Created by Daxin on 2017/8/19.  * <p/>  * 奶牛排队饮水问题  * 输入:n牛的数目,然后n个整数表示牛的序号  * 输出:输出交换最少次数  * <p/>  * 例如一个测试用例:9<br>  * 2,2,1,3,3,3,2,3,1<br>  * 输出:4  *  *在线题目地址:http://www.hustoj.com/oj/problem.php?id=10

WOJ1109 奶牛排队

题目链接: WOJ1109 题目描述: 奶牛在熊大妈的带领下排成了一条直队. 显然,不同的奶牛身高不一定相同-- 现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,且中间如果存在奶牛,则身高不能和A.B奶牛相同,的这样的一些奶牛最多会有多少头. 从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是0.2,但不会是1). 输入 第一行一个数N(2<=N<=100000),表示奶牛的头数. 接下来N个数,每行一个数,从上到下

USACO 奶牛排队

题目:给出一个只含有1,2,3的数字序列,问最少交换多少次才能将之变为递增数列. 解: 注意到只有1,2,3,我们只要将1,3交换到自己的应在位置上那么排序就已经完成了. 需要交换的有几种,记$a(x,,y)$表示x在应该是y的位置上的$a(i)$的个数,那么我们优先交换a(1,3)和a(3,1)里的数字,一次交换扳正两个位置,接下来要想扳正一个1或3的位置就必须要进行一次交换操作. 统计计算即可. 1 #include <iostream> 2 #include <cstdio>

03day2

03day1 不说了,图论题因为没有把加边的过程放到循环里导致只有 10 分.(不要吐槽我啊...) ? 竞赛排名 排序 [问题描述] [输入] 文件的第一行为参赛总人数 N(1≤N≤1000),从第二行到第 N 行依次为编号 1 到编号为 N 的选手的成绩,每行有 8 个 0-100 之间的整数,代表该选手的 8 项竞赛成绩 Xi1,Xi2,-,Xi8.同一行相邻两个数之间用一个空格符隔开. [解题过程] 看题目用了好久.只要能理解题意基本上没问题.(至于 lzw 大神把数据类型设成 long

USACO翻译:USACO 2013 DEC Silver三题

USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 栅栏油漆 奶牛排队 英文题目名称 msched paint lineup 可执行文件名 msched paint lineup 输入文件名 msched.in paint.in lineup.in 输出文件名 msched.out paint.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运

USACO翻译:USACO 2013 JAN三题(1)

USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入文件名 mirrors.in paint.in lineup.in 输出文件名 mirrors.out paint.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运行内存限制

USACO翻译:USACO 2012 JAN三题(3)

USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup 输入文件名 grazing.in climb.in lineup.in 输出文件名 grazing.out climb.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运行内存

POJ3169 差分约束 线性

Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12522   Accepted: 6032 Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 <= N <= 1,000) cows numbered 1..N standing along