原题

传送门

有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值(minSPFi and maxSPFi),太大就晒伤了,太小奶牛没感觉。
而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。
那么为了不让奶牛烫伤,又不会没有效果。
给出了L种防晒霜。每种的数量和固定的阳光强度(coveri and SPFi)也给出来了
每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。

思路

声明

minSPFi : 奶牛忍受的阳光强度最小值
maxSPFi : 奶牛忍受的阳光强度最大值
coveri : 防晒霜数量
SPFi : 防晒霜阳光强度

初始的思路(38 pts)

这是一道贪心题,但我开始时还是想错了。

我先将每头牛按照最小忍受阳光强度从小到大排序,防晒霜按照强度从小到大排序。

然后开始枚举,对于第 \(i\) 个奶牛 ,假设当前枚举到第 \(l\) 个 防晒霜 , 当其 \(SPFi < minSPFi\) , \(l++\) ,直到满足 \(SPFi \ge minSPFi\) ,而当 \(SPFi > maxSPFi\) , 则 continue ,最后判断一下防晒霜剩余个数即可判断答案

初始代码(38 pts)

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = 2510;
int C,L,ans,l = 0; struct cow{//奶牛
int l,r;
bool operator < (const cow &b) const{
if(l == b.l) return r < b.r;
return l < b.l;
}
}a[MAXN]; struct sunscreen{//防晒霜
int SP,num;
bool operator < (const sunscreen &b) const{
return SP < b.SP;
}
}lotion[MAXN]; int main (){
scanf("%d %d",&C,&L);
for(int i = 0 ;i < C;i++) scanf("%d %d",&a[i].l,&a[i].r);
for(int i = 0 ;i < L;i++) scanf("%d %d",&lotion[i].SP,&lotion[i].num);
sort( a , a+C );
sort( lotion , lotion+L);
for(int i = 0 ;i < C;i++){
if(lotion[l].num == 0) l++; //判断个数
while ( a[i].l > lotion[l].SP && l < L-1) l++;//查找左端点是否符合条件
if( a[i].r < lotion[l].SP) continue;//右端点不符合直接跳过
lotion[l].num--;
ans++;//答案处理
}
printf("%d",ans);
return 0;
}

正解思路

然鹅,这种贪心错了。

举个例子:



按照这种算法,我们会让 1 区间使用 I ,2区间使用 J,3 区间使用 K ,答案为 3。

但是答案为4。

正确解法应该为:

先将每头牛按照最小忍受阳光强度从大到小排序,然后开始枚举,对于第 \(i\) 个奶牛 ,我们要找到它能用的防晒霜里面SPFi最大的,然后计算答案。

关于正确性

SPFi更小的显然其他没枚举到的牛很可能会被用到,于是我们拿掉SPFi最大的,具体可以见上面的图。

代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = 2510;
int C,L,ans; struct cow{
int l,r;
bool operator < (const cow &b) const{
return l > b.l;
}
}a[MAXN]; struct sunscreen{
int SP,num;
}lotion[MAXN]; int main (){
scanf("%d %d",&C,&L);
for(int i = 0 ;i < C;i++) scanf("%d %d",&a[i].l,&a[i].r);
for(int i = 0 ;i < L;i++) scanf("%d %d",&lotion[i].SP,&lotion[i].num);
sort( a , a+C );
for(int i = 0 ;i < C;i++){
int l = -1,choose = -1;
for(int j = 0;j < L;j++)//暴力枚举
if ( lotion[j].num > 0 && lotion[j].SP >= a[i].l && lotion[j].SP <= a[i].r)
if(lotion[j].SP > choose){
choose = lotion[j].SP;
l = j;
}
if( l != -1 ){
ans++;
lotion[l].num--;
}//答案处理
}
printf("%d",ans);
return 0;
}

题解 洛谷 P2287 [USACO07NOV]Sunscreen G的更多相关文章

  1. 【题解】洛谷P3119 Grass Cownoisseur G

    题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时 ...

  2. BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】

    题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...

  3. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  4. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

  5. 题解-洛谷P4859 已经没有什么好害怕的了

    洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...

  6. 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)

    题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...

  7. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  8. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  9. 题解-洛谷P6788 「EZEC-3」四月樱花

    题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ...

随机推荐

  1. EM(最大期望)算法推导、GMM的应用与代码实现

    EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计. 使用EM算法的原因 首先举李航老师<统计学习方法>中的例子来说明为什么要用EM算法估计含有隐变量的概率模型参数. 假设 ...

  2. 6、struct2使用servlet的api函数

    方法一: Struts2的Action访问Servlet API 可以通过实现装配接口没,完成对Servlet API的访问 * ServletRequestAware取得HttpServletReq ...

  3. 设计模式系列之外观模式(Facade Pattern)——提供统一的入口

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  4. VulnHub PowerGrid 1.0.1靶机渗透

    ​本文首发于微信公众号:VulnHub PowerGrid 1.0.1靶机渗透,未经授权,禁止转载. 难度评级:☆☆☆☆☆官网地址:https://download.vulnhub.com/power ...

  5. Web安全之暴力破解

    暴力破解,顾名思义简单粗暴直接,我理解为将所有的“答案”都进行尝试直到找到正确的“答案", 当然我们不可能将所有的“答案”都进行尝试,所以我们只能将所有最有可能是正确的“答案”进行尝试即可 ...

  6. 如何判断一个String字符串不为空或这不为空字符串

    如何判断一个String字符串不为空或这不为空字符串 转载兵哥LOVE坤 最后发布于2018-07-27 00:00:05 阅读数 5144  收藏 展开 1.校验不为空:   String str ...

  7. 字节流,读取 a.txt 文件内容,并打印出来

    import java.io.FileInputStream;import java.io.IOException; /** 字节流,读取 a.txt 文件内容,并打印出来 */public clas ...

  8. 网络基础和 TCP、IP 协议

    1.网络基本概念 1.1 什么是网络:一些网络设备按照一定的通讯规则(网络协议)进行通讯的系统. 1.2 VPN(虚拟私有网络)加密,相当于专线,从分支机构到总部. 1.3 资源共享的功能和特点: 数 ...

  9. 个人对于flask中蓝图的理解

    什么是蓝图? 蓝图可以理解为,是一种对项目中的代码进行模块化管理的工具,相当于python中的包为什么要使用蓝图? 在一个py文件中具有多个功能代码,不利于维护和管理. 如果在其他的模块中去调用视图函 ...

  10. .NET 开源项目 StreamJsonRpc 介绍

    StreamJsonRpc 是一个实现了 JSON-RPC 通信协议的开源 .NET 库,在介绍 StreamJsonRpc 之前,我们先来了解一下 JSON-RPC. JSON-RPC 介绍 JSO ...