zoukankan      html  css  js  c++  java
  • CodeForces:847D-Dog Show

    D. Dog Show

    time limit per test2 seconds
    memory limit per test256 megabytes

    Problem Description

    A new dog show on TV is starting next week. On the show dogs are required to demonstrate bottomless stomach, strategic thinking and self-preservation instinct. You and your dog are invited to compete with other participants and naturally you want to win!

    On the show a dog needs to eat as many bowls of dog food as possible (bottomless stomach helps here). Dogs compete separately of each other and the rules are as follows:

    At the start of the show the dog and the bowls are located on a line. The dog starts at position x = 0 and n bowls are located at positions x = 1, x = 2, …, x = n. The bowls are numbered from 1 to n from left to right. After the show starts the dog immediately begins to run to the right to the first bowl.

    The food inside bowls is not ready for eating at the start because it is too hot (dog’s self-preservation instinct prevents eating). More formally, the dog can eat from the i-th bowl after ti seconds from the start of the show or later.

    It takes dog 1 second to move from the position x to the position x + 1. The dog is not allowed to move to the left, the dog runs only to the right with the constant speed 1 distance unit per second. When the dog reaches a bowl (say, the bowl i), the following cases are possible:

    • the food had cooled down (i.e. it passed at least ti seconds from the show start): the dog immediately eats the food and runs to the right without any stop,
    • the food is hot (i.e. it passed less than ti seconds from the show start): the dog has two options: to wait for the i-th bowl, eat the food and continue to run at the moment ti or to skip the i-th bowl and continue to run to the right without any stop.

    After T seconds from the start the show ends. If the dog reaches a bowl of food at moment T the dog can not eat it. The show stops before T seconds if the dog had run to the right of the last bowl.

    You need to help your dog create a strategy with which the maximum possible number of bowls of food will be eaten in T seconds.

    Input

    Two integer numbers are given in the first line - n and T (1 ≤ n ≤ 200 000, 1 ≤ T ≤ 2·109) — the number of bowls of food and the time when the dog is stopped.

    On the next line numbers t1, t2, …, tn (1 ≤ ti ≤ 109) are given, where ti is the moment of time when the i-th bowl of food is ready for eating.

    Output

    Output a single integer — the maximum number of bowls of food the dog will be able to eat in T seconds.
    这里写图片描述

    Note

    In the first example the dog should skip the second bowl to eat from the two bowls (the first and the third).


    • 题意就是一只狗,去吃一列的饭,每次移动到下一个碗花费1秒的时间,瞬间吃完,每个饭的冷却时间为第c[i]秒(只有当饭冷却之后狗才能吃)。问在m秒内这只狗最多能吃多少碗饭。
    • 这是一个经典的贪心问题,狗每次尽可能的多吃饭。就是处理在等待的时间能不能吃更多的饭。枚举第m秒到达的每一个碗。主要是看实现方法。

    /*可以把狗想象成可以后悔,狗要将遇到的每一个碗里的饭都吃下去,
    当狗发现后面还可以吃但是时间不够了的时候,狗可以把饭吐出来
    而老天把狗等待这个饭的时间还给狗,优先队列模拟狗肚子里的饭
    */
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        priority_queue <int> qu;
        int n,m;
        scanf("%d%d",&n,&m);
        int Max = 0;
        for(int i=1;i<=min(m-1,n);i++)
        {
            int temp;
            scanf("%d",&temp);
            while(!qu.empty() && qu.top() >= m-i)//每次时间不够的时候去除等待时间最长的那个碗
                qu.pop();
            if(max(temp,i) < m)
                qu.push(temp-i);
            Max = max((int)qu.size(),Max);
        }
        printf("%d",Max);
        return 0;
    }
    
  • 相关阅读:
    ReactNative 常见红屏黄屏及终端报错
    ReactNative 常见红屏黄屏及终端报错
    React Native小白入门学习路径——二
    学习TINY需要多长时间?
    在Eclipse中导入Tiny工程,有下面的错误,是什么原因?
    为什么我写的page页面无法渲染
    Tiny框架的应用定位
    为什么编译tiny工程出错,提示"不兼容的类型"
    Tiny工程可以配置多个application.xml吗
    为什么web应用在tomcat启动时报java.lang.ClassCastException异常?
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9107248.html
Copyright © 2011-2022 走看看