hihoCoder 1227 2015 北京网络赛 A题
生活随笔
收集整理的這篇文章主要介紹了
hihoCoder 1227 2015 北京网络赛 A题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
給定m個點,然后從這m個點里找到一個點作為圓心,求一個最小的半徑使得圓內剛好有n個點,沒有壓線的點。
思路:
預處理一下各點間的距離,暴力枚舉圓心,然后找到排序后的第n個判斷即可。坑點:n>m的情況要特判一下。
code:
#include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <cmath> using namespace std;const int N=105; struct node {/* data */double x,y;void read(){scanf("%lf%lf",&x,&y);} }v[N]; vector<double> vt[N]; double cal(node A,node B){return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)); } int main() {int T;scanf ("%d",&T);while (T--){int m,n;scanf ("%d%d",&m,&n);for (int i=0;i<=m;i++) vt[i].clear();for (int i=0;i<m;i++) v[i].read();for (int i=0;i<m;i++){for (int j=0;j<m;j++){if (i==j) vt[i].push_back(0);else vt[i].push_back(cal(v[i],v[j]));}}if (n>m){puts("-1");continue;}int ans=0x3f,f=0;for (int i=0;i<m;i++){sort (vt[i].begin(),vt[i].end());int tt=(int) vt[i][n-1] + 1;if (tt>=vt[i][n] &&n<m ) continue;else {ans=min(ans,tt);f=1;}//cout<<ans<<endl;}if (!f) ans=-1;cout<< ans<< endl;} }總結
以上是生活随笔為你收集整理的hihoCoder 1227 2015 北京网络赛 A题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20160821_第三周周报
- 下一篇: 20160828_第4周周报