http://acm.hdu.edu.cn/showproblem.php?pid=6651
题意:考试有n道题目,考试总分为m,每道题目的得分可能为0到m之中的任意一个整数,n道题目内容各不相干,因此要分别复习,如果一道题目得分为x的话,只有复习时间至少为x+1才能获得得分,否则就不得分。问至少要复习多少时间才能保证必定答对k题
思路:对于一个确定的复习方案,老师不让他过的最优策略是把他复习时间最少的n-k+1个内容分别设置为等于他复习时间的分数,这样的话,他过不了n-k+1个题,剩下的k-1个题就算全过也挂了。所以,该同学的策略就是:他复习时间最少的n-k+1个题加起来超过m,因此每道题复习
m
+
1
n
−
k
+
1
\frac{m+1}{n-k+1}
n−k+1m+1上取整或下取整,使得总和为m+1,因为别的题要
>
=
>=
>=前面的,前面要么n-k+1整除m-1,要么不整除,两种情况都可以表示为
m
n
−
k
+
1
+
1
\frac{m}{n-k+1}+1
n−k+1m+1,因此答案就是
m
+
1
+
(
k
−
1
)
∗
(
m
n
−
k
+
1
+
1
)
m+1+(k-1)*(\frac{m}{n-k+1}+1)
m+1+(k−1)∗(n−k+1m+1)。
#include<bits/stdc++.h>
using namespace std;
const int maxn=500000+100;
const int mod=1000000000+7;
typedef long long ll;
int T,n,m,k;
int main()
{
//freopen("input.in","r",stdin);
cin>>T;
while(T--)
{
cin>>n>>m>>k;
cout<<m+1+(ll)(k-1)*(m/(n-k+1)+1)<<"\n";
}
return 0;
}