SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 A. 地铁站
//其实比赛的时候就想到这方法了,但看到数据太吓人,就没写
//看着标程,实际上就是这方法,太坑爹……
/*
假设值为k,对于图中任意两点,圆1半径k/t1,圆2半径k/t2
圆1与圆2的交集为可以设置地铁站的位置
两圆有交集等价为:两半径之和大于等于两点的距离,对于任意两点,能求出最小k值
存在地铁站 等效为 对于图中任意两点画出的两个圆都有交集
*/
1 //Æäʵ±ÈÈüµÄʱºò¾ÍÏëµ½Õâ·½·¨ÁË£¬µ«¿´µ½Êý¾ÝÌ«ÏÅÈË£¬¾Íûд 2 //¿´×űê³Ì£¬Êµ¼ÊÉϾÍÊÇÕâ·½·¨£¬Ì«¿Óµù¡¡ 3 /* 4 ¼ÙÉèֵΪk£¬¶ÔÓÚͼÖÐÈÎÒâÁ½µã£¬Ô²1°ë¾¶k/t1£¬Ô²2°ë¾¶k/t2 5 Ô²1ÓëÔ²2µÄ½»¼¯Îª¿ÉÒÔÉèÖõØÌúÕ¾µÄλÖà 6 Á½Ô²Óн»¼¯µÈ¼ÛΪ£ºÁ½°ë¾¶Ö®ºÍ´óÓÚµÈÓÚÁ½µãµÄ¾àÀ룬¶ÔÓÚÈÎÒâÁ½µã£¬ÄÜÇó³ö×îСkÖµ 7 ´æÔÚµØÌúÕ¾ µÈЧΪ ¶ÔÓÚͼÖÐÈÎÒâÁ½µã»³öµÄÁ½¸öÔ²¶¼Óн»¼¯ 8 */ 9 #include <cstdio> 10 #include <cstdlib> 11 #include <cstring> 12 #include <cmath> 13 #include <list> 14 #include <stack> 15 #include <vector> 16 #include <set> 17 #include <map> 18 #include <queue> 19 #include <algorithm> 20 #include <iostream> 21 using namespace std; 22 23 double x[100005],y[100005],t[100005]; 24 25 int main() 26 { 27 long n,i,j; 28 double r; 29 scanf("%ld",&n); 30 for (i=1;i<=n;i++) 31 scanf("%lf%lf%lf",&x[i],&x[i],&t[i]); 32 for (i=1;i<n;i++) 33 for (j=i+1;j<=n;j++) 34 r=max(r,( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) )/t[i]); 35 printf("%.2lf",r); 36 return 0; 37 }