首页 > 试题广场 >

小红闯关

[编程题]小红闯关
  • 热度指数:6228 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\,\,\,\,\,\,\,\,\,\,小红在玩一个游戏,这个游戏有 n 个关卡,通过第 i 个关卡需要消耗 a_i 个单位时间,小红必须按从前往后的顺序通过每一个关卡。
\,\,\,\,\,\,\,\,\,\,每通过 k 个关卡,小红会获得一个跳关道具,跳关道具可以在任意一个关卡使用,使用跳关道具后可以不消耗时间直接通过关卡。
\,\,\,\,\,\,\,\,\,\,小红想知道她通过这 n 个关卡,最少需要多少时间。

输入描述:
\,\,\,\,\,\,\,\,\,\,第一行输入两个整数 n, k\left(1 \leq n, k \leq 10^5\right) 代表关卡数量和获得跳关道具的条件。
\,\,\,\,\,\,\,\,\,\,第二行输入 n 个整数 a_1, a_2, \dots, a_n\left(1 \leq a_i \leq 10^5\right) 代表通过每个关卡需要消耗的时间。


输出描述:
\,\,\,\,\,\,\,\,\,\,在一行上输出一个整数,表示小红通过这 n 个关卡所需的最少时间。
示例1

输入

3 2
1 3 2

输出

4

说明

\,\,\,\,\,\,\,\,\,\,小红通过第二个关卡后获得跳关道具,此时消耗 1+3 单位时间;在第三个关卡使用跳关道具,不再消耗时间。
示例2

输入

6 2
1 1 4 5 1 4

输出

7

说明

\,\,\,\,\,\,\,\,\,\,小红通过第二个关卡后获得第一个跳关道具;
\,\,\,\,\,\,\,\,\,\,在第四个关卡使用第一个跳关道具后得到第二个跳关道具;
\,\,\,\,\,\,\,\,\,\,在第六个关卡使用第二个跳关道具。
示例3

输入

5 1
2 4 5 1 3

输出

2

说明

\,\,\,\,\,\,\,\,\,\,通过第一关后,后面的关卡都可以使用跳关道具。跳关也算一次成功的闯关。
头像 丨阿伟丨
发表于 2025-08-28 10:49:00
题目链接 小红闯关 题目描述 小红需要按顺序通过 个关卡。通过第 个关卡需要花费 的时间。 每当小红通过了 个关卡(无论是花费时间还是使用道具),她都会获得一个“跳关道具”。 跳关道具可以用于任何一个关卡,使用后能以 0 时间通过该关卡。 请计算通过所有 个关卡所需的最少总时间。 解题思路 展开全文
头像 BraveCoder
发表于 2025-09-04 21:32:58
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n 展开全文
头像 Silencer76
发表于 2025-08-09 19:00:26
题目链接 小红闯关 题目描述 小红在玩一个游戏,这个游戏有 个关卡,通过第 个关卡需要消耗 个单位时间。小红必须按从前往后的顺序通过每一个关卡。 每当小红通过 个关卡(无论是付费通关还是使用道具),她都会获得一个跳关道具。跳关道具可以在任意一个关卡使用,使用后可以不消耗时间直接通过关卡。 小 展开全文
头像 rpcwx
发表于 2026-02-15 10:25:11
#include <iostream> using namespace std; #include<algorithm> #include<set> #include<vector> int main(){ int n,k; cin>>n& 展开全文
头像 立花泷之介
发表于 2026-02-22 15:50:57
#include <algorithm> #include <iostream> #include <queue> #include <vector> using namespace std; // 这道题关键洞察在于跳关工具均位于k的倍数关卡, 而 展开全文
头像 Jkel
发表于 2026-01-13 11:05:26
观察每次机会可用的范围 void _() { int n, k; cin >> n >> k; vector<int> a(n + 1); for (int i = 1; i <= n; i++) cin & 展开全文
头像 lahm66
发表于 2025-10-06 18:32:49
贪心 import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = ne 展开全文
头像 Jupiter-56
发表于 2025-10-19 17:27:49
// 优先队列+反向查询 #include <algorithm> #include <functional> #include <iostream> #include <queue> #include <vector> using nam 展开全文
头像 牛客917168115号
发表于 2026-03-17 21:09:39
倒序遍历数组,当数组下表i % k == 0 && i >= k时,此时一定是有跳关能力的,此时从堆中获取一个最大的值跳过。 package main import ( "fmt" "container/heap" ) 展开全文
头像 暮色回响_
发表于 2026-01-28 20:49:24
#include<bits/stdc++.h> #include <queue> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); int n,k; 展开全文