hihoCoder #1227 : The Cats' Feeding Spots

来源:互联网 发布:中国人民银行 知乎 编辑:程序博客网 时间:2024/04/30 13:41

原题链接:

http://hihocoder.com/problemset/problem/1227


题目大意:

T组测试数据。

m个点,以任意一点为圆心求一个最小半径r将n个点圈起来。(边界上不允许有点)


代码如下:

#include<iostream>#include<cstdio>#include<cmath>#include<utility>#include<algorithm>;using namespace std;const int MAXN=1000+10;pair<double,double>p[MAXN];double r[MAXN];int main(){int T;scanf("%d",&T);while(T--){int n,m;int ans=MAXN;scanf("%d%d",&m,&n);for(int i=0;i<m;i++){scanf("%lf%lf",&p[i].first,&p[i].second);}for(int i=0;i<m;i++){double R;for(int j=0;j<m;j++)r[j]=sqrt((p[i].first-p[j].first)*(p[i].first-p[j].first)+(p[i].second-p[j].second)*(p[i].second-p[j].second));sort(r,r+m);R=ceil(r[n-1]);R=R==r[n-1]?R+1:R;//处理边界上点if(m!=n&&R >= r[n]) continue;//不能超过n个点if(R<ans)ans=R;}if(ans==MAXN){cout<<-1<<endl;continue;}cout<<ans<<endl;}}


0 0
原创粉丝点击