• 2019HDU多校第七场 HDU6651 Final Exam


    一、题目

       Final Exam 

    二、分析

      题目说的比较绕,总之一定要记住,$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;
    }
  • 相关阅读:
    ZOJ 3349 Special Subsequence
    ZOJ 3684 Destroy
    ZOJ 3820 Building Fire Stations
    HDU 5291 Candy Distribution
    HDU 3639 Hawk-and-Chicken
    HDU 4780 Candy Factory
    HDU 4276 The Ghost Blows Light
    ZOJ 3556 How Many Sets I
    技术人员的眼界问题
    神经网络和深度学习
  • 原文地址:https://www.cnblogs.com/dybala21/p/11347018.html
Copyright © 2020-2023  润新知