bzoj1071[SCOI2007]组队
1071: [SCOI2007]组队
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 2472 Solved: 792
[Submit][Status][Discuss]
Description
NBA每年都有球员选秀环节。通常用速度和身高两项数据来衡量一个篮球运动员的基本素质。假如一支球队里
速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有队员都应该满足: A * ( height
– minH ) + B * ( speed – minV ) <= C 其中A和B,C为给定的经验值。这个式子很容易理解,如果一个球队的
球员速度和身高差距太大,会造成配合的不协调。 请问作为球队管理层的你,在N名选秀球员中,最多能有多少名
符合条件的候选球员。
Input
第一行四个数N、A、B、C 下接N行每行两个数描述一个球员的height和speed
Output
最多候选球员数目。
Sample Input
5 1
3 2
2 3
2 1
Sample Output
HINT
数据范围: N <= 5000 ,height和speed不大于10000。A、B、C在长整型以内。
2016.3.26 数据加强 Nano_ape 程序未重测
都说是神题,做了之后发现还真有点神。
注意到题目中给的数据可以支持n^2算法,那必须得好好利用
把题目中给出的公式A * ( height – minH ) + B * ( speed – minV ) <= C移项之后,
得到A*height+B*speed<=A*minH+B*minV+C
左边那一堆可以看成一个队员的另一个属性
也就是是说只要知道队员中最低的身高和速度,就可以通过某个队员自身属性判断他是否可以被选中
枚举一下最低身高和最慢速度,构造两个队员数组,第一个按身高排序第二个按属性值排序
速度随意枚举, 然后枚举身高
由于身高,属性值都迪递增,所以可以维护一个区间使其中的队员都满足条件
有点迷的是,维护区间的过程中,加入一个队员进入区间只考虑属性值,而删除一个队员只用考虑身高
容易混淆的就是,这样会不会删除一个本来就不在区间中的队员使得答案偏小?
肯定不会啦,因为仔细思考可以发现代码有个细节,就是考虑队员的速度一定大于最小速度的时候还必须满足小于一个定值,这就可以保证不会出现误删的情况!
还是挺神奇的,下面这个blog讲的不错,可以看看
http://blog.csdn.net/neither_nor/article/details/51282123
#include<bits/stdc++.h>
#define N 5005
using namespace std;
int n,A,B,C;
struct tam{int v,s,h;}a[N],b[N];
bool cmp1(tam x,tam y){return x.h<y.h;}
bool cmp2(tam x,tam y){return x.v<y.v;}
int calc(int x){return A*a[x].h+B*a[x].s;}
int main(){
scanf("%d%d%d%d",&n,&A,&B,&C);
for(int i=;i<=n;i++){
scanf("%d%d",&a[i].h,&a[i].s);
a[i].v=calc(i);b[i]=a[i];
}
sort(a+,a++n,cmp1);
sort(b+,b++n,cmp2);
int ans=;
for(int i=;i<=n;i++){
int m1=a[i].s,m2=m1+C/B,l=,r=,cnt=;
for(int j=;j<=n;j++){
while(r<n&&b[r+].v-A*a[j].h-B*a[i].s<=C)
if(b[++r].s>=m1&&b[r].s<=m2)++cnt;
while(l<n&&a[l+].h<a[j].h)
if(a[++l].s>=m1&&a[l].s<=m2)--cnt;
ans=max(ans,cnt);
}
}
printf("%d\n",ans);
return ;
}
bzoj1071[SCOI2007]组队的更多相关文章
- BZOJ1071: [SCOI2007]组队【双指针】【思维好题】
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...
- 【BZOJ1071】[SCOI2007]组队(神仙题)
[BZOJ1071][SCOI2007]组队(神仙题) 题面 BZOJ 洛谷 题解 首先把式子整理一下,也就是\(A*h+B*v\le C+A*minH+B*minV\) 我们正常能够想到的做法是钦定 ...
- BZOJ 1071 [SCOI2007]组队
1071: [SCOI2007]组队 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1330 Solved: 417[Submit][Status][ ...
- 1071: [SCOI2007]组队
1071: [SCOI2007]组队 https://lydsy.com/JudgeOnline/problem.php?id=1071 分析: dp+单调性. A*(hi–minH)+B*(si–m ...
- [SCOI2007]组队 差分
题面:[SCOI2007]组队 题解: 一开始固定H然后找性质找了很久也没有找到任何有用的东西...... 然后大佬告诉我一个神奇的方法... 首先我们化一波式子: 设$H$表示高度的最小值,$V$表 ...
- 【bzoj1071】[SCOI2007]组队
sum= A*h+B*s排序 然后枚举height和speed的最小值 然后用两个指针:先枚举speed最小值,然后一边枚举v的最小值一边查询符合条件的人数. #include<algorith ...
- BZOJ1071 [SCOI2007]压缩 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1071 题意概括 有两个序列a[1..n], b[1..n],其编号为1..n,设为s序列.现在我们 ...
- 1071: [SCOI2007]组队 - BZOJ
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...
- BZOJ.1071.[SCOI2007]组队(思路)
题目链接 三个限制: \(Ah-AminH+Bv-BminV\leq C\ \to\ Ah+Bv\leq C+AminH+BminV\) \(v\geq minV\) \(h\geq minH\) 记 ...
随机推荐
- 怎么去理解JAVA中类与对象的关系
首先要明确,在现实生活中,每一个物体都有自己的基本特征,专业一点也可以说成是属性有些甚至还有一定的行为.例如 汽车的特征:有车门.有轮胎.颜色各一等等,行为:有行驶,开车门,开车灯,等等.有这些属性和 ...
- codevs 1283 等差子序列
http://codevs.cn/problem/1283/ 题目描述 Description 给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4& ...
- vue 的模板编译—ast(抽象语法树) 详解与实现
首先AST是什么? 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言 ...
- JAVA_SE基础——24.面向对象的内存分析
黑马程序员入学blog ... 接着上一章的代码: //车类 class Car{ //事物的公共属性使用成员变量描述. String name; //名字的属性 String color; //颜色 ...
- [JCIP笔记] (三)如何设计一个线程安全的对象
在当我们谈论线程安全时,我们在谈论什么中,我们讨论了怎样通过Java的synchronize机制去避免几个线程同时访问一个变量时发生问题.忧国忧民的Brian Goetz大神在多年的开发过程中,也悟到 ...
- PHP类的自动加载
spl_autoload_register(function ($className) { require str_replace('\\', '/', $className '.php'); }) ...
- Python内置函数(24)——set
英文文档: class set([iterable]) Return a new set object, optionally with elements taken from iterable. s ...
- 新概念英语(1-3)Sorry, sir
Does the man get his umbrella back? A:My coat and my umbrella please. B:Here is my ticket. A:Thank y ...
- VCS使用学习笔记(1)——Verilog相关的仿真知识
本文主要学习Verilog的仿真特性,以及仿真器对Verilog的处理,算是对Verilog知识的增量学习.本文内容与我的另一篇博文(http://www.cnblogs.com/IClearner/ ...
- Python:使用youtube-dl+ffmpeg+FQ软件下载youtube视频
声明:本文所述内容都是从http://blog.csdn.net/u011475134/article/details/71023612博文中学习而来. 背景: 一同学想通过FQ软件下载一些youtu ...