小猫排队(牛客月赛)

链接:https://ac.nowcoder.com/acm/contest/11224/C
来源:牛客网

题目描述 
世界上最苦恼的事情莫过于排队了,特别是排在你前面的猫比你可爱的时候。----《论猫的自我修养》

小猫啾啾现在就很苦恼,它排在队伍的末尾处等着买酱油,前面还有足足  只猫咪。但幸运的是小猫啾啾会一种魔法:它可以和前面距离它最近且比它可爱(可爱值大于啾啾)的小猫交换位置(被交换的小猫会被传送到啾啾之前的位置)。

已知啾啾每一分钟开始时可以施展一次魔法,而每一分钟过后排在队伍最前面的猫咪就会离开队伍(这意味这啾啾会先交换位置然后队伍才开始移动)。
因为等会还得去买饺子所以啾啾会尽可能地与自身前方比它可爱且未出队的小猫交换位置(可以证明交换后必定更快买到酱油),现在啾啾想请你帮它计算出它需要多久才能买到酱油离开。

输入描述:
第一行一个整数  代表啾啾前方小猫的数量。

第二行  个用空格隔开的整数代表从队伍最前方到队尾每只小猫的可爱值。

第三行一个整数代表啾啾的可爱值。


 可爱值 

输出描述:
一行一个整数代表啾啾需要几分钟才能买到酱油离开队伍。

示例1
输入
复制
6
9 7 3 7 6 2
5
输出
复制
4
说明
用*表示啾啾的位置:

起始时:9 7 3 7 6 2 *(无人出队)

第一分钟时:7 3 7 * 2 6(9已出队)

第二分钟时:3 * 7 2 6(9 7已出队)

第三分钟时:* 7 2 6(9 7 3已出队)

第四分钟时:7 2 6(9 7 3 *已出队)

示例2
输入
复制
1
5
2
输出
复制
1
说明
第一分钟开始的时候啾啾就已经到了队首,所以在第一分钟结束时啾啾就会出队。

思路:先求出大于啾啾可爱值的小鸟的数量,在循环全部小鸟时,抓住啾啾会与大于它可爱值且最近的小鸟互换位置的题意,在遍历时判断该小鸟是否大于啾啾且是否正是啾啾当时正在互换位置的那只;如果遍历完也未找到,就输出啾啾最初的位置即n+1.

#include<iostream>
using namespace std;

const int N = 2e5+10;
int a[N],n,m;

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) cin>>a[i];
    int count=0,x;
    cin>>x;
    for(int i=1;i<=n;i++) if(a[i]>x) count++;
    for(int i=1;i<=n;i++)
    {
        if(a[i]>=x)
        {
            if(i>=count) {cout<<i<<endl;return 0;}
            else count--;
        }
    }
    cout<<n+1<<endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值