2019 Multi-University Training Contest 7 Final Exam

题意:
Cuber QQ复习期末考试,总共有n道不同的题目,每道题目分值可能相同也可能不同,第i题分数为xi分,则Cuber QQ需要xi+1小时复习该知识点才能解决这道题,复习时间少于这道题则无法通过这道题,现在有n门功课,总分是m,保证Cuber QQ完成k道题至少需要多少时间复习。

PS:0分的题目需要1小时复习时间,某门科目的分数可能就是m,不一定要复习所有功课。

题解:
我们可以站在出题人的角度上进行分析,拿10 109 4来分析,Cuber QQ需要过k门科目,则可以先让k-1门科目分数为0,最后卡你第k门的分数,那么,剩下109门平均分配后的分数是16,16,16,16,15,15,15,0,0,0.为什么要平均分配呢,因为倘若你某科分数升高,则必使其他分数降低,这样Cuber QQ需要更少的时间就能过分数低的科目,所以Cuber QQ需要复习的时间(无顺序)16,16,16,16,16,16,16,16,15,15,15的个数=原15的个数 - 1.

AC_Code:

//
//Write by Yuan Xilan on 2019...
//
#include 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ms(s) memset(s, 0, sizeof(s))
const int inf = 0x3f3f3f3f;
const int maxn = 1e+5;
int n;
vector <int> B(n);

int main(int argc, char * argv[]) 
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int t;
    while(~scanf("%d",&t)){
        while(t--){
            ll n,m,k,os;
            scanf("%lld%lld%lld",&n,&m,&k);
            os = n;
            k -= 1;//k门白给 
            n -= k;
            ll cnt1 ,cnt2;
            ll mod = m % n; 
            cnt1 = m / n;
            cnt2 = m / n + 1;
            printf("%lld\n",cnt1 * (n - mod - 1) + cnt2 * (os - n + mod + 1));
        }
    }
    return 0;
}

你可能感兴趣的:(2019 Multi-University Training Contest 7 Final Exam)