hiho 1227 找到一个恰好包含n个点的圆 (2015北京网赛 A题)
2015-10-01 22:51
477 查看
平面上有m个点,要从这m个点当中找出n个点,使得包含这n个点的圆的半径(圆心为n个点当中的某一点且半径为整数)最小,同
时保证圆周上没有点。
n > m 时要输出-1
样例输入
4
3 2 0 0 1 0 1.2 0
2 2 0 0 1 0
2 1 0 0 1.2 0
2 1 0 0 1 0
样例输出
1
2
1
-1
# include <iostream> # include <cstdio> # include <cstring> # include <algorithm> # include <string> # include <cmath> # include <queue> # include <list> # define LL long long using namespace std ; double dis[200][200] ; const int INF = 0x3f3f3f3f ; struct Point { double x,y; }p[200]; double dist(Point a,Point b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } int main() { //freopen("in.txt","r",stdin) ; int T ; scanf("%d" , &T) ; while(T--) { int m , n ; int i , j ; scanf("%d %d" , &m , &n) ; for (i = 0 ; i < m ; i++) scanf("%lf %lf" , &p[i].x , &p[i].y) ; if (n > m) { printf("-1\n") ; continue ; } int ans = INF ; int r ; memset(dis , 0 , sizeof(dis)) ; for (i = 0 ; i < m ; i++) { for (j = i+1 ; j < m ; j++) { dis[i][j] = dis[j][i] = dist(p[i] , p[j]) ; } sort(dis[i] , dis[i]+m) ; r = (int)dis[i][n-1] ; if (r <= dis[i][n-1]) r += 1 ; if (n < m &&r >= dis[i] ) continue ; if (r < ans) ans = r ; } if (ans == INF) printf("-1\n") ; else printf("%d\n" , ans) ; } return 0; }View Code
相关文章推荐
- 小米模式遭竞争者抄袭 山寨者饱受被山寨之苦
- 在Ubuntu上配置Caffe并行计算环境
- Linux初学——磁盘的分区、格式化、检验与载入
- Android Studio
- java 开发中的debug
- [网络和多线程]9、单例模式
- uva 1626 - Brackets sequence
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 聚合函数-transact-sql
- transact-sql的语法规则
- 怎样获取优酷站内视频的MP4格式地址,嵌入到手机页面播放
- LeetCode Sort Colors
- [Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- lintcode做题总结, Sept 30
- 多次惨痛教训告诉我, 以时间戳获取数据必须设一个提前量
- 你可以选择放弃,永远别放弃选择
- easyui在datagrid中显示行详情(二)
- 算法:链表
- 高可用和负载均衡架构设计模式
- Python3.x和Python2.x的区别