题目描述

Like so many others, the cows have developed very haughty tastes and will no longer graze on just any grass. Instead, Farmer John must purchase gourmet organic grass at the Green Grass Grocers store for each of his N (1 ≤ N ≤ 100,000) cows.

Each cow i demands grass of price at least Ai (1 ≤ Ai ≤ 1,000,000,000) and with a greenness score at least Bi (1 ≤ Bi ≤ 1,000,000,000). The GGG store has M (1 ≤ M ≤ 100,000) different types of grass available, each with a price Ci (1 ≤ Ci ≤ 1,000,000,000) and a greenness score of Di (1 ≤ Di ≤ 1,000,000,000). Of course, no cow would sacrifice her individuality, so no two cows can have the same kind of grass.

Help Farmer John satisfy the cows' expensive gourmet tastes while spending as little money as is necessary.

约翰的奶牛对食物越来越挑剔了。现在,商店有M 份牧草可供出售,奶

牛食量很大,每份牧草仅能供一头奶牛食用。第i 份牧草的价格为Pi,口感为

Qi。约翰一共有N 头奶牛,他要为每头奶牛订购一份牧草,第i 头奶牛要求

它的牧草价格不低于Ai,口感不低于Bi。请问,约翰应该如何为每头奶牛选

择牧草,才能让他花的钱最少?

输入输出格式

输入格式

  • Line 1: Two space-separated integers: N and M.

  • Lines 2..N+1: Line i+1 contains two space-separated integers: Ai and Bi

  • Lines N+2..N+M+1: Line i+N+1 contains two space-separated integers: Ci and Di

输出格式

  • Line 1: A single integer which is the minimum cost to satisfy all the cows. If that is not possible, output -1.

样例

INPUT

4 7

1 1

2 3

1 4

4 2

3 2

2 1

4 3

5 2

5 4

2 6

4 4

OUTPUT

12

SOLUTION

贪心+multiset

本题每一头奶牛有两个标准来找到它合适的牧草。为了使花费最小,当然是选择的两个参数值越小越好。

而且这两个参数是绑定在一起的,所以考虑用pair存数据(pair在库里别忘了qwq)。

首先找到最小符合的牧草,再把这个牧草相关数据从set里删除。

我们可以以其中一个参数为主关键字,按要求从高到低来处理奶牛的要求,每当现在指针所指的牧草能够满足要求,我们就把它的另一参数加入我们的multiset中,加入完成之后multiset会自动维护好当前的最优值。倒着处理可以避免预先加入了不合当前奶牛要求的牧草,保证了正确性,从而降低了处理的代码复杂度。

这里维护有一个也不能说上是技巧的小技巧:

因为我们的pair是默认以first为主关键字升序排序的,而我们要求输出的是其中一个参数:价格的和。因为我们在操作中是把两个参数的一个参数加入multiset维护,所以显而易见的,要得到所有选取的牧草的价格,我们只要把牧草变为pair中的second就可以了。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <set>
  6. #include <algorithm>
  7. #include <utility>
  8. typedef long long LL;
  9. inline int read(){
  10. int x=0,f=1;char ch=getchar();
  11. while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
  12. while (ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
  13. return x*f;}
  14. const int N=101000;
  15. int n,m;
  16. std::pair<int,int> cow[N],grass[N];
  17. using namespace std;
  18. int main(){
  19. int i,j;
  20. n=read();m=read();
  21. for (i=1;i<=n;++i){cow[i].second=read();cow[i].first=read();}
  22. sort(cow+1,cow+n+1);
  23. for (i=1;i<=m;++i){grass[i].second=read();grass[i].first=read();}
  24. sort(grass+1,grass+m+1);
  25. multiset<int> G;j=m;LL ans=0;
  26. for (i=n;i>=1;--i){
  27. for (;j&&(grass[j].first>=cow[i].first);--j) G.insert(grass[j].second);
  28. multiset<int>::iterator iter;
  29. iter=G.lower_bound(cow[i].second);//因为默认以first为主关键字
  30. if (iter==G.end()) {puts("-1");return 0;}
  31. ans+=(*iter);G.erase(iter);
  32. }
  33. printf("%lld\n",ans);
  34. return 0;
  35. }

LG_2869_[USACO07DEC]美食的食草动物Gourmet Grazers的更多相关文章

  1. P2869 [USACO07DEC]美食的食草动物Gourmet Grazers

    P2869 [USACO07DEC]美食的食草动物Gourmet Grazers 题目:约翰的奶牛对食物越来越挑剔了.现在,商店有M 份牧草可供出售,奶牛食量很大,每份牧草仅能供一头奶牛食用.第i 份 ...

  2. [USACO07DEC]美食的食草动物Gourmet Grazers

    ---题面--- 题解: 首先观察题面,直觉上对于一头奶牛,肯定要给它配pi和qi符合条件的草中两者尽量低的草,以节省下好草给高要求的牛. 实际上这是对的,但观察到两者尽量低这个条件并不明确,无法用于 ...

  3. luogu2869 [USACO07DEC]美食的食草动物Gourmet Grazers

    先满足挑剔的 #include <algorithm> #include <iostream> #include <cstdlib> #include <cs ...

  4. Luogu2869 [USACO07DEC]美食的食草动物Gourmet Grazers (贪心,二分,数据结构优化)

    贪心 考场上因无优化与卡常T掉的\(n \log(n)\) //#include <iostream> #include <cstdio> #include <cstri ...

  5. POJ3622 Gourmet Grazers(FHQ Treap)

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2363   Accepted: 881 Description Like s ...

  6. POJ 3622 Gourmet Grazers(贪心)

    [题目链接] http://poj.org/problem?id=3622 [题目大意] 给出一些物品拥有两个属性值,价格和精美程度 给出一些需求表示要求获得的物品两个属性值的两种属性下界, 一个物品 ...

  7. luogu 2869 挑剔的美食家

    Gourmet Grazers 传送门 题目大意 约翰的奶牛对食物越来越挑剔了.现在,商店有\(M\) 份牧草可供出售,奶牛食量很大,每份牧草仅能供一头奶牛食用.第\(i\) 份牧草的价格为\(P_i ...

  8. POJ1058 The Gourmet Club

    题目来源:http://poj.org/problem?id=1058 题目大意:ACM城的美食俱乐部有16位成员.他们连续了当地的法国餐厅Chatrau Java来安排连续5天的晚餐.晚餐时他们每4 ...

  9. Hawk 1.2 快速入门2 (大众点评18万美食数据)

    本文将讲解通过本软件,获取大众点评的所有美食数据,可选择任一城市,也可以很方便地修改成获取其他生活门类信息的爬虫. 本文将省略原理,一步步地介绍如何在20分钟内完成爬虫的设计,基本不需要编程,还能自动 ...

随机推荐

  1. 在阿里做了5年技术Leader,我总结出这些套路!

    转自 51CTO技术栈 内容 团队建设 团队管理 团队文化 沟通与辅导 招聘与解雇 互联网公司的技术团队管理通常分为两个方向:技术管理和团队管理,互联网公司的技术 TL 与传统软件公司的 PM 还是有 ...

  2. BitcoinCore JSONRPC Java使用,创建账号,获取余额,转账等等...

    1.首先要安装好bitcoin core服务 上一篇有怎么安装 下面代码支持多钱包多地址动态调用,但让我没用使用多地址,根据自己的需要然后封装方法就好 2.引入jar  JavaBitcoinRpcC ...

  3. 创建Git仓库

    创建Git仓库 一.什么是版本仓库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能 ...

  4. JavaScript面试题(珍爱生命,远离面试)

    1.使用 typeof bar === "object" 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端? 使用 typeof 的弊端是显而易见的(这种弊端同使用 ...

  5. iOS 加急审核的办法

    前言:由于自己的APP在提交后,审核了大概一周左右还没有消息,而领导又不断询问情况,于是自己在网上看到了这篇文章.由于自己比较懒,所以在此记录下来,以供 大家参考. 说明:本文只是做一个记录,还望看到 ...

  6. 第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】

    淘淘商城(SpringMVC+Spring+Mybatis)  是传智播客在2015年9月份录制的,几年过去了.由于视频里课上老师敲的代码和项目笔记有些细节上存在出入,只有根据日志报错信息作出适当的调 ...

  7. Codeforces Round #559(Div.1)

    A 签到贪心题,特判了n=1或m=1的情况才发现2<=n,m<=1e5 #include<bits/stdc++.h> using namespace std; typedef ...

  8. Solving ordinary differential equations I(nonstiff problems),exercise 1.1

    Solve equation $y'=1-3x+y+x^2+xy$ with another initial value $y(0)=1$. Solve: We solve this by using ...

  9. bcp文件, 逗号文件

    bcp 实用工具 https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-2017 大容量复制程序实用工具 (bc ...

  10. python,winreg,获取当前系统的桌面绝对路径

    import winreg import os def main(): new_path = os.path.join(desktop_path(), 'aaa.xlsx') # 结果为:C:\\Us ...