HDU 4864 Task

Posted yfceshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4864 Task相关的知识,希望对你有一定的参考价值。

题意: 每台机器有x,y两种属性,有m个任务。假设机器的这两个属性大于任务,那么就是能够完毕这个任务,而且每一个任务每仅仅能完毕一个任务。
思路:先依照x排序,x相等,依照y排序,每一次记录下来能够完毕这个任务的机器。寻找属性相差最小的那台。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long
#define N 111111

struct node{
    int x,y;
    ll ac;
    void input(){
     scanf("%d%d",&x,&y);
     ac = 500*x+2*y;
    }
}a[N],b[N];


bool cmp(node xx,node yy){
   if(xx.x==yy.x) return xx.y>yy.y;
   return xx.x>yy.x;
}

int n,m;
int vis[111];

int main(){
    while(scanf("%d%d",&n,&m)==2){
        for(int i=0;i<n;i++)
            a[i].input();
        for(int j=0;j<m;j++)
            b[j].input();
        sort(a,a+n,cmp);
        sort(b,b+m,cmp);
        ll sum = 0;
        int ans =0;
        memset(vis,0,sizeof(vis));
        for(int i=0,j=0;i<m;i++){
            while(j<n&&a[j].x>=b[i].x){
                vis[a[j].y]++;
                j++;
            }
            for(int k=b[i].y;k<=100;k++){
                if(vis[k]){
                vis[k]--;
                ans++;
                sum+=b[i].ac;
                break;
                }
            }
        }
        printf("%d %I64d\n",ans,sum);

    }
}

以上是关于HDU 4864 Task的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4864 Task(经典贪心)

Task / HDU - 4864

HDU4864:Task(贪心)

HDU 4864 Task

HDOJ4864 Task 题解报告

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题