【2019杭電多校訓練賽】1006-Final Exam 題解(貪心+數學問題)

原題鏈接: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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章