• 毕业考试


    问题描述
    快毕业了,Barry希望能通过期末的N门考试来顺利毕业。如果他的N门考试平均分能够达到V分,则他能够成功毕业。现在已知每门的分数不能够超过R;他的第i门考试目前得分为Ai,如果想要在这门科目增加一分则需要多写Bi篇论文。Barry想知道,如果想要毕业的话,他最少需要写多少篇论文?

    输入格式(exam.in)
    第一行三个整数,N, R, V,分别代表考试科目数,每门考试的最高分,需要达到的平均分。
    接下来的N行每行两个整数A, B,分别代表这门考试的目前得分与增加一分需要多写的论文数。

    输出格式(exam.out)
    一个整数,代表他要毕业最少需要写的论文数。

    样例输入
    5 5 4
    3 1
    3 2
    5 2
    4 7
    2 5

    样例输出
    4

    数据范围及约束
    对于30%的数据,N<=5, R<=3;
    对于100%的数据,N<=100,000, R<=1000,000,000, 1<=V<=R
    保证答案不超过10^18.

    这是一道贪心模拟题。只要不到限制,就一直先写最便宜的论文。注意要开long long

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cstdio>
    #include<queue>
    #define LL long long
    using namespace std;
    LL n,r,v,N,now,ans;
    struct H{
        LL b;
        LL a;
    }w[100009];
    bool cmp(H x,H y){return x.b<y.b;} 
    int main()
    {
        scanf("%lld%lld%lld",&n,&r,&v);
        for(int i=1;i<=n;i++) scanf("%lld%lld",&w[i].a,&w[i].b),now+=w[i].a;
        sort(w+1,w+n+1,cmp);
        N=n*v;
        int p=0;
        while(N>now)
        {
            p++;
            if(now+r-w[p].a<=N)
                 now+=r-w[p].a,ans+=w[p].b*(r-w[p].a);
            else ans+=w[p].b*(N-now),now=N;
        }
        printf("%lld",ans);
        return 0;   
    } 
  • 相关阅读:
    2019暑假——区域赛真题讲解
    2019暑假杭电训练赛(补题及笔记)
    2019暑假牛客训练赛(补题及笔记)
    网络流——最大流-Dinic算法
    SPFA
    K短路(A*+SPFA)
    从业务架构视角聊聊大型商业银行的转型实践
    互联网 40 岁失业是一个无法打破的魔咒吗
    Hadoop集群中出现的节点有哪些作用
    CDH集群的角色划分
  • 原文地址:https://www.cnblogs.com/dfsac/p/7587883.html
Copyright © 2020-2023  润新知