模拟赛T117901 共享电动车

Posted wild-donkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟赛T117901 共享电动车相关的知识,希望对你有一定的参考价值。

2020.1.30

模拟赛(一)

第三题直接放弃,只整理前两题

爆零老国王:再次爆零

T1共享电动车

题目背景

在疫情爆发后,W市停止了市内的公共交通,以防止病毒的大规模传播。而你现在有事需要出门,只能借助W市中的共享电动车。

题目描述

共享电动车的计费方式是每tt分钟1元,剩下不足tt分钟的部分也计1元。也就是说,如果你一次骑行了x分钟,则费用为?t/x?元。

现在你需要骑行n段行程,每段行程之间会休息一段时间。在休息时,你可以选择还车,立即结束本次租用,一段时间之后再次租车。也可以选择暂时锁车,继续计算时间。在一段行程中,你必须一直租用电动车骑行,不能还车。

给出你接下来的行程计划,请你求出最少的花费。

输入格式

第一行两个整数nn, tt,分别表示行程段数和计费周期。

接下来nn行,每行两个非负整数l~i~, r~i~li,ri,分别表示第ii段行程的起始时刻和结束时刻(分钟)。

输出格式

一行一个整数,表示最少的花费。

输入输出样例

输入

3 15
0 16
20 25
50 95

输出

5

说明/提示

对于30%的数据,n<=100 , r~n~<=5000

对于60%的数据,n<=1000

对于100%的数据,1<=n<=10^6^,r~n~<=10^18^,1<=t<=r~n~,1≤t≤r~n~

保证行程不会重叠,且按照起始时刻升序给出,即r~i-1~<l~i~<r~i~<l~i+1~

每次租车骑行时间计算方式为还车时刻减租车时刻。

样例说明

第一次租用从0分钟到25分钟,共25分钟,2元。第二次租用从50分钟到95分钟,共45分钟,3元。

题解

获得成就:含冤而死

本来就写的贪心,策略也是正解策略,但是的确有一点小问题,所以爆零了

思路:白嫖就是了,嫖到就是赚到

因为是将所用时间除以计价时间,然后向上取整,所以不管骑不骑,都要等到最后一刻再还车,白嫖到最后一刻。这样,就能不让血汗钱白花!如果在白嫖结束前,下一段行程就开始了,那么就可以省一段时间的费用。如果不幸在白嫖结束之前没有开始新的行程,那就锁车,然后等新行程开始再开一辆。

写出AC代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
long long l, r, a, ans = 0, n, t, at = 0;
int main() {
    scanf("%lld%lld", &n, &t);
    for (int i = 1; i <= n; i++) {
        scanf("%lld%lld", &l, &r);//一定要优化读入,不能用cin,会TLE
        if (at >= r) {//特别注意这种情况,就是白嫖时间走完全程,这样就不用掏钱了
            continue;
        }
        if (at <= l) {//白嫖失败,重新租车
            a = (r - l + (t - 1)) / t;//重新租车的费用,向上取整的偷懒大法,不用double就能解决
            at = l + t * a;//时间推移(只要不重新掏钱,就白嫖到底)
            ans += a;
        }
        else {//白嫖成功,不还了,继续骑老车
            a = (r - at + (t - 1)) / t;//从白嫖结束开始计费
            at += t * a;//时间推移(只要不重新掏钱,就白嫖到底)
            ans += a;
        }
    }
    cout << ans << endl;
    return 0;
}

以上是关于模拟赛T117901 共享电动车的主要内容,如果未能解决你的问题,请参考以下文章

11.按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的(代码片段

按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量(代码片段

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

C 中的共享内存代码片段

美国的共享电动滑板车热,真是一场浩劫吗?

有序充电基于matlab蒙特卡诺和拉格朗日乘子法模拟电动车有序和无序充电含Matlab源码 2375期