暴力,先確定左右邊界,再遍曆y,注意剪枝
#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <limits.h>#include <time.h>#include <string.h>using namespace std;#define LL long long#define PI acos(-1.0)#define MAX INT_MAX#define MIN INT_MIN#define eps 1e-8#define FRE freopen("a.txt","r",stdin)#define MOD 1000000007#define N 1004int n;struct point{ int x,y;}p[N];int ll;int Y[N];bool cmp(point a,point b){ return a.x<b.x;}int gao(int l,int r){ int i,j; int cnt=0; for(i=0;i<n;i++){ if(p[i].x>=l && p[i].x<=r) Y[cnt++]=p[i].y; } sort(Y,Y+cnt); int maxm=0; int tt=-1; for(i=0;i<cnt;i++){ int tot=0; if(Y[i]==tt)continue; tt=Y[i]; j=i; while(j<cnt&& Y[j]>=Y[i] && Y[j]<=Y[i]+ll){ j++; tot++; } if(tot>maxm)maxm=tot; } return maxm;}int main(){ while(scanf("%d%d",&n,&ll)!=EOF){ int i,j; for(i=0;i<n;i++){ scanf("%d%d",&p[i].x,&p[i].y); } sort(p,p+n,cmp); int ans=0; int tt=-1; for(i=0;i<n;i++){ int sum; if(p[i].x==tt)continue; tt=p[i].x; sum=gao(p[i].x,p[i].x+ll); if(sum>ans)ans=sum; } printf("%d\n",ans); } return 0;}