传送门:Final Exam
题意大概是,期末考试中,有n种不同的题形,总分为m,且每道题的分数是不定的,有可能会出现某道题分值为0或分值为m的极端情况。现在,复习一道分值为x的题,需要耗费x+1个单位的时间(若分值为0,仍需要耗费1个单位时间)才能做出这道题。n道题每道题的题形不同且分值未知,需要求出在任何情形下(即卷面各题分数的所有可能情况)都能做出k道题的最小复习时间。
问题的难点在于每道题提醒不同且分值未知,但只要能在最坏的情况下做出k道题,那么就能保证在任何情形下都能做出k道题。考虑最坏的情况:复习时间最少的n-k+1道题,每道题的分数都大于等于复习时间。为了应对这种情况,一个可行的策略是,求出n道题中分值第k小的可能的最大的分数,即,然后复习
时间以确保一定能够做出k-1道题。而剩下的n-k+1道题中,只要再做出一道即可完成k题的目标,于是,只需要再复习m+1时间,即可保证即使分数最高的n-k+1道题中的某道题分值为m,也能解出这道题。所以,最终的答案就是
#include <iostream>
#include <cmath>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
ll n, m, k, t;
ll ans;
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n >> m >> k;
cout << (m/(n-k+1)+1)*(k-1)+m+1 << '\n';
}
return 0;
}