#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=5e3+5;
struct Node {
int h,v,s;
}a[MAXN],b[MAXN];
int n,A,B,C,ans;
bool cmph(Node x,Node y) { return x.h<y.h; }
bool cmps(Node x,Node y) { return x.s<y.s; }
signed main() {
cin>>n>>A>>B>>C;
for(int i=1;i<=n;i++)
{
cin>>a[i].h>>a[i].v;
a[i].s=A*a[i].h+B*a[i].v, b[i]=a[i];
}
sort(a+1,a+n+1,cmph);
sort(b+1,b+n+1,cmps);
for(int i=1;i<=n;i++) // 枚举固定 minv
{
int minv=a[i].v, maxv=a[i].v+C/B;
int l=1, r=0, cnt=0;
for(int j=1;j<=n;j++) // 枚举固定 minh
{
int minh=a[j].h;
int smax=C+A*minh+B*minv;
while(r+1<=n && b[r+1].s<=smax) // 更新 r 指针
{
r++;
if(minv<=b[r].v && b[r].v<=maxv) cnt++;
}
while(l<=n && a[l].h<minh) // 更新 l 指针
{
if(minv<=a[l].v && a[l].v<=maxv) cnt--; // 重复贡献
l++;
}
ans=max(ans,cnt);
}
}
cout<<ans;
}
SCOI 组队 题解
最新推荐文章于 2024-09-27 20:46:47 发布