HDU6651 Final Exam

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} nk+1m+1上取整或下取整,使得总和为m+1,因为别的题要 > = >= >=前面的,前面要么n-k+1整除m-1,要么不整除,两种情况都可以表示为 m n − k + 1 + 1 \frac{m}{n-k+1}+1 nk+1m+1,因此答案就是 m + 1 + ( k − 1 ) ∗ ( m n − k + 1 + 1 ) m+1+(k-1)*(\frac{m}{n-k+1}+1) m+1+(k1)(nk+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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值