题解 洛谷 P2287 [USACO07NOV]Sunscreen G
原题
有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的更多相关文章
- 【题解】洛谷P3119 Grass Cownoisseur G
题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时 ...
- BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
- 题解-洛谷P4229 某位歌姬的故事
题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...
- 题解-洛谷P4724 【模板】三维凸包
洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...
- 题解-洛谷P4859 已经没有什么好害怕的了
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...
- 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)
题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...
- 题解 洛谷 P3396 【哈希冲突】(根号分治)
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...
- 题解-洛谷P6788 「EZEC-3」四月樱花
题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ...
随机推荐
- 9.实战交付一套dubbo微服务到k8s集群(2)之Jenkins部署
1.下载Jenkins镜像打包上传harbor上 [root@hdss7- ~]# docker pull jenkins/jenkins:2.190. [root@hdss7- ~]# docker ...
- 为什么启动线程是start方法?
为什么启动线程是start方法 十年可见春去秋来,百年可证生老病死,千年可叹王朝更替,万年可见斗转星移. 凡人如果用一天的视野,去窥探百万年的天地,是否就如同井底之蛙? 背景:启动线程是start ...
- 本地代码提交到远程仓库(git)
[准备环境] 我没有在Linux搭建gitlab私有云服务器,用的是开源的 gitee托管平台 1.在gitee注册账号 2.本地下载git客户端 [步骤] 1 本地新建1个文件夹 进入文件夹后 ...
- Tensorflow实现神经网络的前向传播
我们构想有一个神经网络,输入为两个input,中间有一个hidden layer,这个hiddenlayer当中有三个神经元,最后有一个output. 图例如下: 在实现这个神经网络的前向传播之前,我 ...
- JavaWeb网上图书商城完整项目--day02-7.提交注册表单功能之流程分析
1.点击注册之后将提交的信息传递到UserServlet的public String regist方法进行处理,然后将东西通过service进行处理 业务流程:
- jni 字符串的梳理 2 字符串的处理操作
我们实现下面的一个功能: 1.首先在java层传递一个字符串到c层,c层首先将jstring转换成char*类型,然后将两个字符串相加,然后再再将char*类型转换成jstring,在上层显示出来 我 ...
- return ,continue,break的用法与区别总结
1.return 语句的作用 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行. (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方 ...
- 轻松搞定安全框架(Shiro)
SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...
- 新技术新框架不断涌现,目前学习web前端开发都要掌握什么?
web前端开发由网页制作演变而来,随着web2.0的发展,网页不再只是承载单一的文字和图片,各种丰富媒体让网页的内容更加生动,网页上软件化的交互形式为用户提供了更好的使用体验,这些都是基于前端技术实现 ...
- docker 运行镜像
docker run -e "环境变量=值“ --nam 别名 -v /etc/localtime:/etc/localtime:ro [时区保持跟宿主机器一致]-d -p 21021:80 ...