Pagini recente » Cod sursa (job #2275411) | Cod sursa (job #3148543) | Cod sursa (job #2443622) | Cod sursa (job #2444387) | Cod sursa (job #1253277)
#include <cstdio>
#include <vector>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
#define mp make_pair
#define X first
#define Y second
#define nn 410
#define nm 100100
using namespace std;
double er = 0.000000001;
FILE *f,*g;
vector <pair<double,double> > v;
double l[nm];
int k[nm];
double r[nn];
int n,m,nr;
double res;
void read()
{
double ax,ay;
int i;
f=fopen("sea.in","r");
g=fopen("sea.out","w");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(f,"%lf%lf",&ax,&ay);
v.push_back(mp(ax,ay));
}
for (i=1;i<=m;i++)
fscanf(f,"%lf%d",&l[i],&k[i]);
}
inline double euclid(pair<double,double> a, double b)
{
return ( sqrt( (a.X-b)*(a.X-b) + a.Y*a.Y ) );
}
inline double dist(pair<double,double> a, double b)
{
return ( (a.X-b)*(a.X-b) + a.Y*a.Y ) ;
}
int partitie(int st,int dr)
{
int i=st-1, j=dr+1;
double val = r[st+rand()%(dr-st+1)];
while (1)
{
do i++; while ( val-r[i]>=er ) ;
do j--; while ( r[j]-val>=er ) ;
if (i<j)
swap(r[i],r[j]);
else
return j;
}
}
double divide(int st,int dr,int k)
{
if (st==dr) return r[st];
int q;
q=partitie(st,dr);
if (k<=q)
return divide(st,q,k);
else
return divide(q+1,dr,k);
}
void solve()
{
int i,j;
for (i=1;i<=m;i++)
{
for (j=0,nr=0;j<n;j++)
if (l[i]>=v[j].X)
r[++nr] = dist(v[j],l[i]);
fprintf(g,"%.4lf\n", sqrt(divide(1,nr,k[i])));
}
}
int main()
{
read();
solve();
return 0;
}