1. 程式人生 > >HDU 4864 Task(2014多校第一場1004)(貪心)

HDU 4864 Task(2014多校第一場1004)(貪心)

題意:有n個機器和m個測試,只有機器的time和level都不小於測試的time和level才能通過測試,一個機器只能對應一個測試,一個測試只能對應一個機器。每通過一個測試可以得到金錢數:500*time+2*level。求能通過測試的數量及最大的錢數。

題解:乍一看公式,決定最後錢數多少的是time,所以先按找time排序,由大到小,如果相等則按level由大到小排序。從time最大的測試開始選起。

程式碼:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <map>
typedef __int64 ll;
const int N=100005;
using namespace std;
struct node
{
    int x,y;
}machine[N],tesk[N];
bool 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,i,j,k,num;
    ll money;
    int temp[105];
    while(~scanf("%d%d",&n,&m))
    {
        for(i=0;i<n;i++)
            scanf("%d%d",&machine[i].x,&machine[i].y);
        for(i=0;i<m;i++)
            scanf("%d%d",&tesk[i].x,&tesk[i].y);
        sort(machine,machine+n,cmp);
        sort(tesk,tesk+m,cmp);
        memset(temp,0,sizeof(temp));
        for(i=0,j=0,money=0,num=0;i<m;i++)
        {
            while(machine[j].x>=tesk[i].x&&j<n)//標記符合時間條件的機器
            {
                temp[machine[j].y]++;
                j++;
            }
            for(k=tesk[i].y;k<=100;k++)//判斷是否有能完成測試的機器
            {
                if(temp[k])
                {
                    temp[k]--;
                    num++;
                    money=money+500*tesk[i].x+2*tesk[i].y;
                    break;
                }
            }
        }
        printf("%d %I64d\n",num,money);
    }
    return 0;
}


相關推薦

HDU 4864 Task2014第一1004貪心

題意:有n個機器和m個測試,只有機器的time和level都不小於測試的time和level才能通過測試,一個機器只能對應一個測試,一個測試只能對應一個機器。每通過一個測試可以得到金錢數:500*t

hdu 4865 Peter's Hobby2014 聯合第一 E

Recently, Peter likes to measure the humidity of leaves. He recorded a leaf humidity every day. There are four types of leaves wetness: Dry , Dryish , Dam

2018杭電第一1011hdu 6308

題解:這題主要會超時,不能用string。可以使用sscanf提取字串。 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<queue

2018杭電第一1003hdu 6300

題解:畫個圖發現只要按橫座標排序,每次取三個點就永遠不會相交 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<queue> #

HDU 6304 2018 HDU第一 Chiaki Sequence Revisited二分+倍增規律

Chiaki Sequence Revisited Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1717  

HDU 5301 Buildings2015第二

pop event -a port sha style with code line Buildings Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java

2018杭電第一A

bits 題意 img sca name amp alt 題解 .com 題意:x+y+z = n , n%x=0,n%y=0,n%z=0,求x*y*z 的最大值 題解: ac code: #include <bits/stdc++.h>

hdu 第一

sort pro push_back -- num printf air 順序輸出 urn 1001 思路:打表可以發現只有3|n 和 4|n 的情況有解,判一下就好啦。 #include<bits/stdc++.h> #define LL lon

Different Integers牛客第一+莫隊做法

tdi har lock def ack type void *** 種類 題目鏈接:https://www.nowcoder.com/acm/contest/139/J 題目: 題意:給你n個數,q次查詢,對於每次查詢得l,r,求1~l和r~n元素得種類。

HDU 5361 In Touch 2015 6 1009 最短路 + 區間更新

題意:最短路,求源點到所有點的最短距離。但與普通最短路不同的是,給出的邊是某點到區間[l,r]內任意點的距離。 輸入一個n,代表n個點,輸入n個l[i],輸入n個r[i],輸入n個c[i]。 對於i,表示i到區間[i - r[i]],i - l[i]]和

牛客第一 F. Sum of Maximum拉格朗日插值

題目描述 Given a1, a2, ..., an, find  modulo (109+7). 輸入描述: The input consists of several test cases and is terminated by end-of-file. T

2017第一 HDU 6041 I Curse Myself Tarjan找環+K路歸併

Problem Description There is a connected undirected graph with weights on its edges. It is guaranteed that each edge appears in at

牛客第一 B Symmetric Matrix組合數公式+dp

題目描述 Count the number of n x n matrices A satisfying the following condition modulo m. * Ai, j ∈ {0, 1, 2} for all 1 ≤ i, j ≤ n. * Ai,

牛客第一A——Monotonic Matrix數論——組合數學—— Lindström–Gessel–Viennot lemma

這題在打比賽時,我感覺到了來自於世界的惡意。。。 Lindström–Gessel–Viennot lemma定理,在比賽前,我是完全沒有聽說過的,好想哭,掛機的數論選手。。。 1. Count the number of n x m matrices A satisfyi

杭電第一 Chiaki Sequence Revisited找規律

Chiaki Sequence Revisited Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1624  

2018牛客網暑假第一J樹狀陣列+思維

題目描述:     有一個n個數的數列,並由q個詢問,每一個詢問有一個l和r,問你在區間a1—al和ar—an這兩個區間中有多少個不同的數。 題目分析:     這個題目事實上是spoj的某一題的改編,原題是求l到r區間有多少個不同的數,現在這個題是要求兩個分開的區間有

2017第一HDU6038

還是太菜了這麼多人過的一道題目,自己卻想了這麼久,然而到現在還是不是很清楚這個東西,先寫一個題解吧,題目給的是一個公式 f(i)=bf(ai) 給定了b陣列和a陣列,然後問有多少種對映的方案滿足上式, 首先來看下樣例 f(0)=bf(1) f(1

hdu 6304 第一 Chiaki Sequence Revisited

//#include <bits/stdc++.h> #include<stdio.h> #include<string.h> #include<string> #include<math.h> #in

2015第一1002單調佇列、STL multiset、

Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 997    Accepted Su

Card Hand Sorting 18中南第一C題

tin 在一起 最大 次數 push_back bool tor using post 一、題意 隨機給你一堆牌(標準撲克牌),之後讓你按照:  第一優先規則:所有相同花色的在一起   第二優先規則:所有相同花色的必須按照升序或者降序排列 問,你最少要拿出多少張牌插入到其他