博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 挑剔的美食家
阅读量:6417 次
发布时间:2019-06-23

本文共 1422 字,大约阅读时间需要 4 分钟。

  因为要找最小的价格呀

  所以对于每个牛 我们都去找最小的满足条件的草

  将牛和草 的鲜嫩程度从大到小排序

  然后 依次枚举牛

  用 multiset来保存所有满足条件的草的价格

  然后去二分找 第一个大于等于 第i个牛的要求的价格的值  找到之后就erase一下 否则就输出-1

  因为草的鲜嫩程度是从大到小的

  所以满足第一个牛的所有草 它的鲜嫩程度一定满足第二个牛

 

#include 
#include
#include
#include
#include
using namespace std;const int maxn = 100100;struct node{ int value; // 价格 int neng; // 鲜嫩程度};bool cmp(node left, node right){ return left.neng > right.neng;}multiset
s; // 因为不同草的定价相同multiset
:: iterator it;node cow[maxn]; // 牛node grass[maxn]; // 草int main(){ int n, m; long long int ans = 0; scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++){ scanf("%d%d", &cow[i].value, &cow[i].neng); } for(int i = 1; i <= m; i++){ scanf("%d%d", &grass[i].value, &grass[i].neng); } // 按照草的新鲜程度从大到小排序 sort(cow + 1, cow + 1 + n, cmp); sort(grass + 1, grass + 1 + m, cmp); int num = 1; for(int i = 1; i <= n; i++){ while(num <= m && grass[num].neng >= cow[i].neng){ s.insert(grass[num].value); num++; } //for(it = s.begin(); it != s.end(); ++it){ // cout << *it << " "; //} cout << endl; it = s.lower_bound(cow[i].value); // 找到第一个大于等于第i个牛的要求的最低价 //cout << *it << endl; if(it == s.end()){ puts("-1"); return 0; } ans += *it; s.erase(it); } printf("%lld\n", ans); return 0;}

  

转载于:https://www.cnblogs.com/weiyukang/p/9350672.html

你可能感兴趣的文章
Android.mk用法整理
查看>>
JavaScript引用类型之Object类型
查看>>
026 使用大数据对网站基本指标PV案例的分析
查看>>
JavaScript最全的10种跨域共享的方法
查看>>
android UI布局
查看>>
小程序学习笔记五:API
查看>>
STO(Security Token Offering)证券型通证、代币发行介绍
查看>>
LeetCode: Add Binary 解题报告
查看>>
企业证书发布笔记
查看>>
dll 问题 (转)
查看>>
使用sql生成UUID
查看>>
mysql日期函数(转)
查看>>
PowerShell 简介
查看>>
REST API用得也痛苦
查看>>
Adapter 数据缓存
查看>>
SYS_并发管理系列2_并发程序运行状态查询和监控(案例)
查看>>
JSF
查看>>
php修改排序,上移下移
查看>>
转:tomcat基本安全认证
查看>>
Centos 如何启动时不启动桌面服务
查看>>