原題鏈接:1006-Final Exam
代碼
這題的題意比較好理解,答案也很簡單,但是方法不太好想,直接先放上代碼吧:
#include<stdio.h>
int T;long long n,m,k;
int main(){
scanf("%d",&T);
while(T--) {
scanf("%lld %lld %lld",&n,&m,&k);
printf("%lld\n",(m/(n-k+1)+1)*(k-1)+m+1);
}
return 0;
}
題解
對,這題是個思維題:
- 這題的關鍵點就是在轉換,將學生至少要學多少個小時轉換成老師卡你需要多少時間。
- 很明顯你想過k題,但老師不想讓你過,老師會選你用時最少的題目來卡你,所以你最多隻能過k-1題,那麼就有n-k+1的題目你一定要花m+1的時間來過一題。
- 而剩下k-1的時間,只需要花費m在n-k+1的值中的最小值加1就好了,最壞的情況就是平均分配,所以取平均並且向下取整加1。
- 相加即可得到答案m/(n-k+1)+1)*(k-1)+m+1。