[USACO23FEB] Watching Mooloo B 题解

[USACO23FEB] Watching Mooloo B

哈嗨嗨 ,今年USACO铜级没过的出来吧,好好看看这个月的题是怎么没过的吧!

题目描述

贝茜喜欢看 Mooloo 的演出。因为她是一只忙碌的奶牛,她计划在接下来的 N ( 1 ≤ N ≤ 1 0 5 ) N (1 \le N \le 10^5) N(1N105) 天去看演出。因为 Mooloo 提供了订阅服务,她想要使她花费的钱最少。

Mooloo 有一个有趣的订阅服务系统:若要在此之后的连续 d d d 天看演出,则在订阅时需要花费 d + K ( 1 ≤ K ≤ 1 0 9 ) d+K(1 \le K \le 10^9) d+K(1K109) 个单位价格。你可以随时订阅;若本次订阅已经过期,你可以根据需要订阅多次。基于以上条件,请计算出贝茜最少要花费多少个单位价格,才能完成她的计划。

输入格式

第一行输入两个正整数 N N N K K K

第二行输入 N N N 个正整数,表示在这些天里,贝茜会看 Mooloo 的演出: 1 ≤ d 1 < d 2 < ⋯ < d N ≤ 1 0 14 1 \le d_1<d_2<\cdots<d_N \le 10^{14} 1d1<d2<<dN1014

输出格式

请注意,此问题中可能需要使用 64 位整数数据类型(如 C 或 C++ 中的 long long)。

样例 #1 解释

贝茜在第 7 7 7 天时,购买了 3 3 3 天的订阅,共花费 d + K = 3 + 4 = 7 d+K=3+4=7 d+K=3+4=7 个单位价格。

样例 #2 解释

贝茜在第 1 1 1 天时,购买了 1 1 1 天的订阅,花费 d + K = 1 + 3 = 4 d+K=1+3=4 d+K=1+3=4 个单位价格;在第 10 10 10 天时,也购买了 1 1 1 天的订阅,花费 d + K = 1 + 3 = 4 d+K=1+3=4 d+K=1+3=4 个单位价格。贝茜一共花费了 8 8 8 个单位价格。

样例 #1

样例输入 #1

2 4
7 9

样例输出 #1

7

样例 #2

样例输入 #2

2 3
1 10

样例输出 #2

8

C++代码如下:

#include <iostream>
using namespace std;

long long N, K, ans;
long long days[1000005];

int main() {
    cin >> N >> K;
    for (int i = 0; i < N; i++){
    	cin >> days[i];
    	if (i == 0){ //如果是第一天
    		ans += K + 1; //开始一个订阅
		}
		else{ //如果不是
			long long extandcost = days[i] - days[i-1];
			long long startcost = K + 1;
			ans += min(extandcost, startcost);//比较续约和重新开始一个订阅(取最便宜的)
		}
	}
	cout << ans;
    return 0;
    //优雅结束
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值