Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- #define db double
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int N=105;
- const db eps=1e-6;
- inline db sqr(db x){
- return x*x;
- }
- inline int dcmp(const db &x){
- if(fabs(x)<eps)return 0;
- return x>0?1:-1;
- }
- struct Point{
- db x,y;
- inline Point(){}
- inline Point(db _x,db _y):x(_x),y(_y){}
- };
- #define Vec Point
- inline Vec operator +(const Vec &a,const Vec &b){
- return Vec(a.x+b.x,a.y+b.y);
- }
- inline Vec operator -(const Vec &a,const Vec &b){
- return Vec(a.x-b.x,a.y-b.y);
- }
- inline void operator +=(Vec &a,const Vec &b){
- a.x+=b.x,a.y+=b.y;
- }
- inline void operator -=(Vec &a,const Vec &b){
- a.x-=b.x,a.y-=b.y;
- }
- inline Vec operator *(const Vec &a,const db &b){
- return Vec(a.x*b,a.y*b);
- }
- inline Vec operator /(const Vec &a,const db &b){
- return Vec(a.x/b,a.y/b);
- }
- inline db Norm(const Vec &a){
- return sqrt(sqr(a.x)+sqr(a.y));
- }
- inline Point Middle(const Point &A,const Point &B){
- return (A+B)/2;
- }
- inline Vec I(const Vec &a){
- return a/Norm(a);
- }
- inline db Dis(const Point &A,const Point &B){
- return Norm(A-B);
- }
- inline Vec Rotate(const Vec &A){
- return Vec(-A.y,A.x);
- }
- Point P[N];
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int R;r(R);
- int n;r(n);
- for(int i=0;i<n;++i){
- int x,y;r(x),r(y);
- P[i]=Point(x,y);
- }
- int ans=1;
- for(int i=0;i<n;++i){
- for(int j=i+1;j<n;++j){
- db tmp=Dis(P[i],P[j]);
- if(dcmp(tmp-2*R)>0)continue;
- Point M=Middle(P[i],P[j]);
- db len=sqrt(R*R-tmp*tmp/4);
- Point C=M+Rotate(I(P[i]-P[j]))*len;
- int cnt=0;
- for(int k=0;k<n;++k){
- if(dcmp(Dis(C,P[k])-R)<=0)cnt++;
- ans=max(ans,cnt);
- }
- C=M-Rotate(I(P[i]-P[j]))*len;
- cnt=0;
- for(int k=0;k<n;++k){
- if(dcmp(Dis(C,P[k])-R)<=0)cnt++;
- ans=max(ans,cnt);
- }
- }
- }
- printf("%d\n",ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement