zoukankan      html  css  js  c++  java
  • 安排机器

    链接:https://www.nowcoder.com/questionTerminal/42e7ff5c5696445ab907caff17fc9e15?orderByHotValue=1&page=1&onlyReference=false
    来源:牛客网
     

    小Q的公司最近接到m个任务, 第i个任务需要xi的时间去完成, 难度等级为yi。
    小Q拥有n台机器, 每台机器最长工作时间zi, 机器等级wi。
    对于一个任务,它只能交由一台机器来完成, 如果安排给它的机器的最长工作时间小于任务需要的时间, 则不能完成,如果完成这个任务将获得200 * xi + 3 * yi收益。

    对于一台机器,它一天只能完成一个任务, 如果它的机器等级小于安排给它的任务难度等级, 则不能完成。

    小Q想在今天尽可能的去完成任务, 即完成的任务数量最大。如果有多种安排方案,小Q还想找到收益最大的那个方案。小Q需要你来帮助他计算一下。

    输入描述:

    输入包括N + M + 1行,
    输入的第一行为两个正整数n和m(1 <= n, m <= 100000), 表示机器的数量和任务的数量。
    接下来n行,每行两个整数zi和wi(0 < zi < 1000, 0 <= wi <= 100), 表示每台机器的最大工作时间和机器等级。
    接下来的m行,每行两个整数xi和yi(0 < xi < 1000, 0 <= yi<= 100), 表示每个任务需要的完成时间和任务的难度等级。


     

    输出描述:

    输出两个整数, 分别表示最大能完成的任务数量和获取的收益。

    示例1

    输入

    1 2
    100 3
    100 2
    100 1

    输出

    1 20006
    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define LL long long
    const int maxn = 1e5 + 10;
    struct node{
        int x,y;
    }e[maxn],f[maxn];
    int cnt[105];
    int cmp(node a,node b){
        if(a.x == b.x) return a.y > b.y;
        return a.x > b.x;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++) scanf("%d%d",&e[i].x,&e[i].y);
        for(int i=0;i<m;i++) scanf("%d%d",&f[i].x,&f[i].y);
        sort(e,e+n,cmp);
        sort(f,f+m,cmp);
        int num = 0;
        LL ans = 0;
        memset(cnt,0,sizeof(cnt));
        int i,j,k;
        for(i=0,j=0;i<m;i++){
            while(j<n&&e[j].x>=f[i].x){
                cnt[e[j].y]++;
                j++;
            }
            for(k=f[i].y;k<=100;k++){
                if(cnt[k]){
                    num++;
                    cnt[k]--;
                    ans=ans+200*f[i].x+3*f[i].y;
                    break;
                }
            }
        }
        printf("%d %lld
    ",num,ans);
        return 0;
    }
    
  • 相关阅读:
    【5.3】dict的子类
    【5.2】dict的常用方法
    【5.1】dict的abc继承关系
    【4.5】列表推导式、生成器表达式、字典推导式
    【4.4】bisect维护已排序序列
    【4.3】实现可切片的对象
    【4.2】Python序列中+、+=和extend的区别
    【4.1】Python中的序列分类
    【3.12】contextlib简化上下文管理器
    【3.11】Python中的with语句
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602270.html
Copyright © 2011-2022 走看看