BZOJ 1071 [SCOI2007]组队
2015-08-20 11:04
253 查看
1071: [SCOI2007]组队
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1330 Solved: 417
[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和speedOutput
最多候选球员数目。Sample Input
4 1 2 105 1
3 2
2 3
2 1
Sample Output
4HINT
数据范围: N <= 5000 ,height和speed不大于10000。A、B、C在长整型以内。Source
题解:这是一个乱搞的题,泥萌去围观大爷的题解吧= =反正复杂度对了就行。。。
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<stack> #include<queue> #include<cstring> #define PAU putchar(' ') #define ENT putchar('\n') #define MSE(a,b) memset(a,b,sizeof(a)) #define REN(x) for(ted*e=fch[x];e;e=e->nxt) #define TIL(x) for(int i=1;i<=x;i++) #define ALL(x) for(int j=1;j<=x;j++) using namespace std; const int maxn=5000+10; double mx,mi;int l,r,cnt,ans,n,A,B,C; struct data{int h,v,s;void update(){s=A*h+B*v;}}arr[2][maxn]; inline bool cmph(const data&a,const data&b){return a.h<b.h;} inline bool cmps(const data&a,const data&b){return a.s<b.s;} inline bool check(int id,int d){return arr[id][d].v<=mx&&arr[id][d].v>=mi;} inline int read(){ int x=0;bool sig=true;char ch=getchar(); for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=false; for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';return sig?x:-x; } inline void write(int x){ if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x; int len=0;static int buf[20];while(x)buf[len++]=x%10,x/=10; for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return; } int main(){ n=read();A=read();B=read();C=read(); TIL(n){arr[0][i].h=read();arr[0][i].v=read();arr[0][i].update(),arr[1][i]=arr[0][i];} sort(arr[0]+1,arr[0]+n+1,cmph);sort(arr[1]+1,arr[1]+n+1,cmps); TIL(n){ mi=arr[0][i].v,mx=mi+(double)C/(double)B;l=r=cnt=0; ALL(n){ while(r<n&&arr[1][r+1].s-A*arr[0][j].h-B*arr[0][i].v<=C)cnt+=check(1,++r); while(l<n&&arr[0][l+1].h<arr[0][j].h)cnt-=check(0,++l);ans=max(ans,cnt); } }write(ans); return 0; }
相关文章推荐
- vector ,hashtable ,hashset 和 hashtable
- jvm简单介绍
- OC基础回顾(十一)类别
- Dubbo java.io.IOException: Can not lock the registry cache file
- zookeeper实战
- oc ------协议
- 获取魅族底部smartbar的高度
- 按两下返回键退出,退出多个activity,添加退出动画
- 【转】Wireshark过滤规则筛选数据包
- 程序员的健康之道
- UVa 225 - Golygons
- 几道常考的前端面试题(蘑菇街)系列一
- Spring Framework 源码阅读
- hdoj 2066 一个人的旅行
- Linux核心接口Netlink
- [error handle][java] 有错误信息时,getErrorStream()返回null
- Java基础笔记(三)
- 嵌入式系统开发(一)——常用字符处理函数
- jquery click嵌套 事件重复注册 多次执行的问题解决
- OK335xS Linux Qt make: icpc: Command not found