#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef vector VI; typedef vector VII; typedef vector VS; typedef long long lint; typedef long long LL; typedef string ST; #define VAR(v,n) typeof(n) v=(n) #define REP(i,n) for(int i=0; i<(n); i++) #define FOR(i,a,b) for(int i=(a); i<=(b); i++) #define FORD(i,a,b) for(int i=(a); i>=(b); i--) #define FOREACH(i,c) for(VAR(i,(c).begin()); i!=(c).end(); i++) #define PB push_back #define PF push_front #define PI pair #define MP make_pair #define FI first #define SE second #define VR vector #define IT iterator #define ALL(x) (x).begin(),(x).end() #define SIZE(x) ((int)(x).size()) #define CLEAR(c,w) memset(c,w,sizeof(c)) struct point { double x,y; }; const double eps=1e-8; struct event { int p,k; double alfa; bool operator<(const event &e) const { if (fabs(alfa-e.alfa)>eps) return alfar) continue; a=acos(d/r); dx=P[j].x-P[i].x; dy=P[j].y-P[i].y; if (dy>=0) baza=acos(dx/(2.0*d)); else baza=2*M_PI-acos(dx/(2.0*d)); E[evs].alfa=baza-a; E[evs].p=j; E[evs].k=+1; evs++; E[evs].alfa=baza+a; E[evs].p=j; E[evs].k=-1; evs++; } sort(E,E+evs); REP(j,evs) { //printf("%lf %d %d\n",E[j].alfa,E[j].p,E[j].k); } int t=0; REP(j,n) O[j]=0; REP(j,2*evs) { int q=j%evs; int p=E[q].p; if (E[q].k==-1) { if (O[p]) { O[p]=0; t--; } } else if (E[q].k==1) { t++; O[p]=1; } if (t+1>w) w=t+1; } } printf("It is possible to cover %d points.\n",w); scanf("%d %lf",&n,&r); r+=1e-5; } return 0; }