【HIHOCODER】The Cats' Feeding Spots
2016-07-15 20:16
232 查看
The Cats’ Feeding Spots
题目链接
The Cats’ Feeding Spots题目大意
给你n个点,现在要你选择一个半径为R的圆,圆心是某个点,然后这个圆中间需要包括n个点,而且在圆上不能有点。题解
暴力
首先可以求出每个点距其他点的距离,然后枚举半径即可,复杂度代码
#include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <cmath> #include <algorithm> using namespace std; struct node { double x,y; }; node mp[205]; int T,m,n; vector<double> v[205]; int main() { scanf("%d",&T); while (T--) { memset(mp,0,sizeof(mp)); int ans=0x7fffffff; for (int i=0;i<205;i++) v[i].clear(); scanf("%d%d",&m,&n); for (int i=0;i<m;i++) scanf("%lf%lf",&mp[i].x,&mp[i].y); for (int i=0;i<m-1;i++) for (int j=i+1;j<m;j++) { double l=sqrt( (mp[i].x-mp[j].x)*(mp[i].x-mp[j].x)+(mp[i].y-mp[j].y)*(mp[i].y-mp[j].y) ); v[i].push_back(l); v[j].push_back(l); } bool f=0; for (int i=0;i<m;i++) sort(v[i].begin(),v[i].end()); for (int i=0;i<m;i++) { int r=1,j=0; while (j<m-1) { while (r>v[i][j] && j<m-1) j++; if (j>=m-1) break; if (r==v[i][j]) { r++; continue;} if (j+1==n) ans=min(ans,r); r++; } if (n==m) ans=min(ans,r); } if (ans!=0x7fffffff) printf("%d\n",ans); else printf("-1\n"); } return 0; }
相关文章推荐
- eetcode_c++:链表:Swap Nodes in Pairs(024)
- 【前端开发】CSS布局
- angular倒计时指令
- CAFFE-probuffer之二
- CAFFE-probuffer之一
- React Native调用开源组件库、安卓原生控件(Android端)
- js实现全选和反选功能
- js改变style样式和css样式
- jQuery 操作DOM总结,DOM Core操作,HTML-DOM操作和CSS-DOM操作
- jQuery 事件方法大全
- [个人博客搬运]ReactiveCocoa学习笔记
- Nodejs初阶之express
- angularjs的初步使用
- 兼容ie8 rgba()用法
- JS简介
- jQuery事件绑定on()、bind()与delegate() 方法详解
- 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式
- Different Ways to Add Parentheses
- jQuery on()方法
- input标签file类型,选择多个文件进行上传