母鸡下蛋 - UPCOJ 3636 - 尺取

题目:

题目描述

  鸡国中的母鸡最擅长下蛋了,MGMG 是鸡国中一只以下蛋产量高而闻名全鸡国的母鸡。

  鸡国专供下蛋的 n 个鸡窝呈一字排列在鸡国的“下蛋中心”,从左到右依次编号为 1 到n。每个鸡窝都有一个最大可下蛋的量,其中第 i 个鸡窝的最大可下蛋量为 ci 。有时候由于MGMG 产量实在太大而无法在一个鸡窝中下完所有的蛋,不得不转移到隔壁的鸡窝继续下蛋,如果隔壁的鸡窝还是不能让它下完所有的蛋,则 MGMG 继续转移,直到下完所有的蛋,或者向“下蛋中心”管理员投诉“鸡窝数量实在太少了,我一只鸡的下蛋量都装不下!”。

  为了节省转移时所耗费的体力,请你编程帮助 MGMG 找若干个连续的鸡窝(个数尽量少),让它能下完所有的蛋。

输入

  输入共 2 行。
  第 1 行输入两个整数 n 和 t,表示“下蛋中心”有 n 个可供下蛋的鸡窝,MGMG 一次总共要下 t 个鸡蛋。

  第 2 行 n 个正整数 ci (1≤i≤n),依次表示第 i 个鸡窝最大可下蛋量为 ci 个。

输出

  输出 1 行一个整数或一个单词。当输出整数时表示让 MGMG 下完所有的蛋至少需要几个连续的鸡窝。当 MGMG 用完所有的鸡窝都无法下完所有的蛋时,MGMG 表示非常愤怒,输出单词“Angry”(不包含双引号,注意大小写)。

样例输入

5 4
1 2 1 2 3

样例输出

2

链接:

http://exam.upc.edu.cn/problem.php?id=3636

思路:

  裸尺取法,没有给数据范围表示很坑。

实现:

//
//  main.cpp
//  L
//
//  Created by LucienShui on 2017/7/24.
//  Copyright © 2017年 LucienShui. All rights reserved.
//

#include <bits/stdc++.h>
#define edl '\n'
using namespace std;

int main (int argc, char* argv[]) {
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
#endif
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,t,tmp,result{};
    cin >> n >> t;
    vector<int> vec;
    for(int i=0 ; i<n ; i++) {
        cin >> tmp;
        result += tmp;
        vec.push_back(tmp);
    }
    if(result<t) {
        cout << "Angry" << edl;
    } else {
        result = n;
        tmp = 0;
        int l{},r{};
        while (true) {
            while(r < n && tmp < t) tmp += vec[r++];
            if(tmp < t) break;
            result = min(r-l,result);
            tmp -= vec[l++];
        }
        cout << result << edl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值