上海计算机学会2023年5月月赛C++丙组T3滑雪训练

题目描述

小爱最近迷上了滑雪,某滑雪场有 n 条不同难度的雪道,只有学习并滑了第 i 条雪道,才能去参加第 i+1 条雪道的学习与训练。

已知,第一次滑第 i 条雪道时,需要先进行 ai​ 分钟的学习,再花 bi​分钟滑该雪道一次,才算学习完成。若之后再滑第 i 条雪道,则仅需 bi​ 分钟即可滑一次。

小爱共有 T 分钟时间,请问如何安排才能使他能滑的圈数最多?

输入格式

输入第一行,两个正整数 n,T
接下来 n 行:每行两个正整数ai​,bi​表示第i条雪道需要的学习时间和滑雪时间。

输出格式

输出一个正整数,表示小爱最多可以滑的圈数。

数据范围

  • 对于30%的数据,1≤n≤10
  • 对于60%的数据,1≤n≤10^3
  • 对于100%的数据,1≤n≤10^5,1≤ai​,bi​,T≤10^18

样例数据

输入:

3 100
10 20
5 5
20 10

输出:

14

说明:

先花30分钟学习第一滑道,此时共计滑了一圈
在花10分钟学习第二滑道,此时共计滑了两圈
剩余60分钟,滑第二滑道,共计滑了14圈

解析:遍历学习的雪道,计算剩余时间,用剩余时间在花费时间最少得雪道滑雪,取最大值,详见代码。

注意:数据范围,要用long long

#include
using namespace std;
int n;
long long t;
long long xue[100005];//学习花费的时间
long long hua[100005];//划一圈花费的时间
long long ans=0;
int main() {
    cin>>n>>t;
    for (int i=1;i<=n;i++){
        cin>>xue[i]>>hua[i];
    }
    long long sumt=0;//前i个雪道学习花费的时间
    long long mit;//前i个雪道中滑一圈花费的最小时间
    for (int i=1;i<=n;i++){
        if (i==1){//求最小值
            mit=hua[i];
        }else if (hua[i]ans) ans=quan;//取最大值
    }
    cout<

你可能感兴趣的:(上海计算机学会月赛丙组,c++,算法,开发语言)