输出格式
一个正整数表示答案
样例输入1
3 4
3 4
2 3
4 2
样例输出1
18
样例输入2
10 1000000000
3 3
1 6
4 7
1 8
5 7
9 9
2 4
6 4
5 1
3 1
样例输出2
1000000076
解题思路
每输入一个关卡的a和b,就进行一次记录,记录通关到当前关卡所花费的时间sum和当前关卡的游戏时间b,之后遍历每一个关卡,重复遍历到的关卡并计算时间,取最小值。
解题代码
#include<iostream>
#include<limits.h>
#define ll long long
using namespace std;
class game
{
public:
ll sum, min;
game():sum(0), min(LONG_LONG_MAX){}
};
int n, x;
game gs[200001];
int main()
{
cin >> n >> x;
for(int i = 1; i <= n;i ++){
ll a, b;
cin >> a >> b;
gs[i].sum = a + b + gs[i - 1].sum;
gs[i].min = gs[i].min < b ? gs[i].min : b;
}
ll time = gs[1].sum + gs[1].min * (x - 1);
for(ll i = 2; i <= n && i <= x; i++){
ll t = gs[i].sum + gs[i].min * (x - i);
if(t < time)
time = t;
}
cout << time << endl;
}
小伙伴快去试试吧!!