zoukankan      html  css  js  c++  java
  • 毕业考试

    问题描述
    快毕业了,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;   
    } 
  • 相关阅读:
    MYSQL删除表的记录后如何使ID从1开始
    Python chardet 字符编码判断
    中文搜索引擎技术揭密
    python 处理中文网页时,忽略特殊字符,忽略异常
    cmd 之基础命令
    自己写的删除主键的存储过程
    朝花夕拾delphi的三层结构
    ERWIN中的一对多标识关系和一对多非标识关系
    翻页用的SQL
    关于 Ajax 的一篇通俗易懂的文章
  • 原文地址:https://www.cnblogs.com/dfsac/p/7587883.html
Copyright © 2011-2022 走看看