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

4 1 2 10
5 1
3 2
2 3
2 1

Sample Output

4

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]组队的更多相关文章

  1. BZOJ1071: [SCOI2007]组队【双指针】【思维好题】

    Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...

  2. 【BZOJ1071】[SCOI2007]组队(神仙题)

    [BZOJ1071][SCOI2007]组队(神仙题) 题面 BZOJ 洛谷 题解 首先把式子整理一下,也就是\(A*h+B*v\le C+A*minH+B*minV\) 我们正常能够想到的做法是钦定 ...

  3. BZOJ 1071 [SCOI2007]组队

    1071: [SCOI2007]组队 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1330  Solved: 417[Submit][Status][ ...

  4. 1071: [SCOI2007]组队

    1071: [SCOI2007]组队 https://lydsy.com/JudgeOnline/problem.php?id=1071 分析: dp+单调性. A*(hi–minH)+B*(si–m ...

  5. [SCOI2007]组队 差分

    题面:[SCOI2007]组队 题解: 一开始固定H然后找性质找了很久也没有找到任何有用的东西...... 然后大佬告诉我一个神奇的方法... 首先我们化一波式子: 设$H$表示高度的最小值,$V$表 ...

  6. 【bzoj1071】[SCOI2007]组队

    sum= A*h+B*s排序 然后枚举height和speed的最小值 然后用两个指针:先枚举speed最小值,然后一边枚举v的最小值一边查询符合条件的人数. #include<algorith ...

  7. BZOJ1071 [SCOI2007]压缩 其他

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1071 题意概括 有两个序列a[1..n], b[1..n],其编号为1..n,设为s序列.现在我们 ...

  8. 1071: [SCOI2007]组队 - BZOJ

    Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...

  9. BZOJ.1071.[SCOI2007]组队(思路)

    题目链接 三个限制: \(Ah-AminH+Bv-BminV\leq C\ \to\ Ah+Bv\leq C+AminH+BminV\) \(v\geq minV\) \(h\geq minH\) 记 ...

随机推荐

  1. PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点

    PHP.Java.Python.C.C++ 这几种编程语言都各有什么特点或优点 汇编: C: Java: C#: PHP: Python: Go: Haskell: Lisp: C++: &l ...

  2. NOIP2017 列队

    https://www.luogu.org/problemnew/show/P3960 p<=500 50分 模拟 每个人的出队只会影响当前行和最后一列 p<=500,有用的行只有500行 ...

  3. WPF自学入门(十一)WPF MVVM模式Command命令

    在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...

  4. 在Vim按了ctrl+s后

    在windows我们码代码的时候习惯ctrl+s保存: 但在vim中使用ctrl+s之后终端就没反应了... vim: ctrl+s终止屏幕输出,敲的东西都有效,就是看不见. ctrl+q恢复:

  5. Python内置函数(59)——open

    英文文档: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ope ...

  6. Oracle 用户创建及权限设置

    1:创建临时表空间create temporary tablespace user_temp  tempfile 'D:\app\Administrator\oradata\ORACLE\xyrj_t ...

  7. anguar使用指令写选项卡

    今天,我们来学习一下angular中怎么使用指令来实现两个选项卡的问题. 首先,要先引入jQuery文件与angularjs文件. <!DOCTYPE html><html lang ...

  8. orchard-1.9.2-1.10.2汉化

    安装 首先从github上下载orchard源代码:https://github.com/OrchardCMS/Orchard(下载版本最新的1.10.2) 使用vs2017打开源代码,运行进入安装界 ...

  9. Django:(博客系统)添加文章(中文)出现UnicodeEncodeError乱码

    添加文章时出现了一个UnicodeEncodeError乱码问题 在添加文章时,抛出了异常: 解决方案,修改manage.py(添加import sys reload(sys) sys.setdefa ...

  10. shell多进程脚本

    #!/bin/bash python_path=/home/huaw/crawler python_name=list_all_v6_crawler.py MAX_SYNC_PROCESS=40 ec ...