(双指针) bzoj 1071

1071: [SCOI2007]组队

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 1267  Solved: 392
[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在长整型以内。

Source

N^N的复杂度啊。。。据说暴力也可以过2333333

先膜拜一下18357大神ORZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,A,B,C,maxx,minn;
struct node
{
    int h,v,sum;
}e[2][5005];
bool cmp1(node a,node b)
{
    return a.h<b.h;
}
bool cmp2(node a,node b)
{
    return a.sum<b.sum;
}
bool check(int id,int val)
{
    return (e[id][val].v<=maxx)&&(e[id][val].v>=minn);
}
int main()
{
    int ans=0;
    scanf("%d%d%d%d",&n,&A,&B,&C);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&e[0][i].h,&e[0][i].v);
        e[0][i].sum=A*e[0][i].h+B*e[0][i].v;
        e[1][i]=e[0][i];
    }
    sort(e[0]+1,e[0]+1+n,cmp1);
    sort(e[1]+1,e[1]+1+n,cmp2);
    for(int i=1;i<=n;i++)
    {
        minn=e[0][i].v,maxx=minn+C/B;
        int l=0,r=0,cnt=0;
        for(int j=1;j<=n;j++)
        {
            while(r<n&&e[1][r+1].sum-A*e[0][j].h-B*e[0][i].v<=C)
            {
                cnt+=check(1,++r);
            }
            while(l<n&&e[0][l+1].h<e[0][j].h)
            {
                cnt-=check(0,++l);
            }
            ans=max(ans,cnt);
        }
    }
    printf("%d\n",ans);
    return 0;
}

  

时间: 2024-08-27 23:09:03

(双指针) bzoj 1071的相关文章

BZOJ 1071组队

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1071 题目很好,居然写了很久,题解找了真多: 主要两种做法: O(n^2lgn),通过优先堆维护,首先 等式变换:A*height+B*speed-C<=A*minheight+B*minspeed; 增加a[i].val=A*height+B*speed-C: 对a按height排序: 然后枚举i 把a[i].s作为min 1 /* **************************

bzoj 1071: [SCOI2007]组队

Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里 速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有队员都应该满足: A * ( height – minH ) + B * ( speed – minV ) <= C 其中A和B,C为给定的经验值.这个式子很容易理解,如果一个球队的 球员速度和身高差距太大,会造成配合的不协调. 请问作为球队管理层的你,在N名选秀球员中,最多能有多少名 符合条件的

[武汉加油] bzoj 5099: [POI2018]Pionek 几何+双指针

几何+双指针 题目大意:现在有 \(n\) 个向量,请你选出来一些向量使它们的和的长度最大,输出最大值的平方. 假如我们已经知道了最终向量的方向,我们要想使长度最大,就需要将所有投影在最终向量正方向上的向量都加起来. 所以我们可以按角度枚举最终向量的方向,我们需要加起来的就是一段移动的区间,我们可以用双指针来维护加起来的向量. 因为最终向量的方向有可能是给出的向量,也有可能是向量之间间隔的方向,所以每次移动指针的时候都要更新一下答案. 因为开始给出的向量不一定有序,所以我们需要先将向量排序. #

怒刷BZOJ记录(二)1038~10xx

我实在是太弱了...不滚粗只能刷BZOJ了...这里来记录每天刷了什么题吧. 2015-8-13: 正式开始! 1030[JSOI2007]文本生成器                       | ac自动机+DP 1042 [HAOI2008]硬币购物                        | 容斥原理+背包 1045 [HAOI2008] 糖果传递                       | 数学+中位数 1047 [HAOI2007]理想的正方形               

BZOJ 1013: [JSOI2008]球形空间产生器sphere

二次联通门 : BZOJ 1013: [JSOI2008]球形空间产生器sphere /* BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元 QAQ SB的我也能终于能秒题了啊 设球心的坐标为(x,y,z...) 那么就可以列n+1个方程,化化式子高斯消元即可 */ #include <cstdio> #include <iostream> #include <cstring> #define rg register #define Max

bzoj 3309 DZY Loves Math - 莫比乌斯反演 - 线性筛

对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample Input 4 7558588 9653114 6514903 445

【BZOJ】[HNOI2009]有趣的数列

[算法]Catalan数 [题解] 学了卡特兰数就会啦>_<! 因为奇偶各自递增,所以确定了奇偶各自的数字后排列唯一. 那么就是给2n个数分奇偶了,是不是有点像入栈出栈序呢. 将做偶数标为-1,做奇数标为+1,显然当偶数多于奇数时不合法,因为它压不住后面的奇数. 然后其实这种题目,打表就可知啦--QAQ 然后问题就是求1/(n+1)*C(2n,n)%p了,p不一定是素数. 参考bzoj礼物的解法. 看到网上清一色的素数筛+分解质因数解法,不解了好久,感觉写了假的礼物-- 后来觉得礼物的做法才比

洛谷 P2709 BZOJ 3781 小B的询问

题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小B请你帮助他回答询问. 输入输出格式 输入格式: 第一行,三个整数N.M.K. 第二行,N个整数,表示小B的序列. 接下来的M行,每行两个整数L.R. 输出格式: M行,每行一个整数,其中第i行的整数表示第i个询问的答案. 输入输出样例 输入样例#1: 6 4 3 1 3 2 1 1 3

BZOJ 1012: [JSOI2008]最大数maxnumber(线段树)

012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插入操作.语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列