Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
29451 LYLAKIOI 【BJ】T2 C++ 解答错误 10 80 MS 2636 KB 1835 2024-05-08 15:11:10

Tests(1/10):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define p_b push_back #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair using namespace std; typedef long long ll; const int maxn=1e5+10; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,p[maxn]; struct node { int x,y; }d[maxn]; bool operator<(node a,node b){ if(a.x!=b.x)return a.x<b.x; return a.y<b.y; } vector<int>v[maxn]; bool dfs(int u){ for(int x:v[u])if((!p[x])||dfs(p[x])){p[x]=u;return 1;} return 0; } double sq(double x){return x*x;} double dis(int x,int y){ return sqrt(sq(d[x].x-d[y].x)+sq(d[y].x-d[y].y)); } bool chk(int x,int y){ double w=dis(x,y); vector<int>L,R; up(i,1,n)if(dis(i,x)<=w&&dis(i,y)<=w){ if(d[x].x!=d[y].x){ double k=(d[y].y-d[x].y)*1.0/(d[y].x-d[x].x); double b=d[y].y-k*d[y].x; double val=d[i].x*k+b; if(val>d[i].y)L.p_b(i); else R.p_b(i); }else { if(d[i].x>d[x].x)L.p_b(i); else R.p_b(i); } } up(i,1,n)v[i].clear(),p[i]=0; for(int x:L)for(int y:R)if(dis(x,y)>w)v[x].p_b(y); int res=0;for(int x:L)res++; return (int(L.size())+int(R.size())-res>=m); } void slv(){ n=read(),m=read();up(i,1,n)d[i].x=read(),d[i].y=read();sort(d+1,d+n+1); double res=0;up(i,1,n)up(j,i+1,n)if(chk(i,j))res=max(res,dis(i,j)); printf("%.6f",res); }int main(){ // freopen("a.in","r",stdin); // freopen("a.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }


测评信息: