一、题目
二、分析
题目说的比较绕,总之一定要记住,$n$个题目都可以做,至少作对$k$到,但是做题目的人不知道每道题对应的分数。
作为出题人,如果他是田忌,肯定不会去在做题目的人可能会做对的$k-1$道题目上去放分,这样的话出题目的人可以使剩下的$n-k+1$道题的分尽可能大,从而防止学生做出$k$道题。
那么作为出题人,能摆出的最优情况就是$frac{m}{n-k+1}$或者大于$frac{m}{n-k+1}$的$n-k+1$个题目分,总和肯定还是$m$。(如果是出题人,应该还会在保证这$n-k+1$个题目除了一个题目,其他都是$frac{m}{n-k+1}$,因为这样能卡掉的可能性最大)
作为做题人,对于这$n-k+1$个数,在最坏情况下(相对于出题人就是最优),做题人是必须要至少做一道题出来,那么相当于就是肯定要至少花$m+1$的时间去复习(我认为就是在最坏情况的最大分值上+1,这样是肯定可以保证这$n-k+1$道题我可以做出来至少1道的,$n-k+1$中的其他题目复习时间就等于$frac{m}{n-k+1}$,这个也是必须要保证的,因为作为做题人不知道自己复习的最好的是否就一定是分数最大的,并且可能刚好剩下的$n-k+1$中的题目没有复习到平均值的时间,出题人就可以把没有加到平均值剩余分数全部加到一个上面去,让你复习最多的也过不了,这样你就做不到$k$题了)。
再回到出题人肯定认为我们能做出来的$k-1$道题,为了保证在我不知道自己会做多少分的题目的情况下,我肯定要做出$k$道题,那么这$k-1$道题的复习时间最优就是$frac{m}{n-k+1} + 1$。比最优的小,出题人是可以调换题目的分值分布让做题人过不了$k$题的。
所以最终结果就是$${(frac{m}{n-k+1} + 1)} imes{(k-1)} + m + 1$$
三、AC代码
#include <bits/stdc++.h> using namespace std; #define ll long long #define Min(a,b) ((a)>(b)?(b):(a)) #define Max(a,b) ((a)>(b)?(a):(b)) /* 3 1 10 1 10 109 10 10 101 9 */ int main() { //freopen("input.txt", "r", stdin); int T; while(scanf("%d", &T) != EOF) { ll n, m, k; while(T--) { scanf("%lld%lld%lld", &n, &m, &k); ll d = m / (n - k + 1); ll ans = (d + 1) * (k - 1) + m + 1; printf("%lld ", ans); } } return 0; }