题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3402
思路:还是有坑的,蚂蚁不是提前放好的,要自己放一下,放的时候肯定是将速度差不多的放在一起这样才能保证时间最长,pi要用公式求出来,不然会有精度问题
放的时候还有2种方法
速度最快 速度第二快 速度第三快 ... 最慢
最慢...... 速度第三快 速度第二快 速度最快
选择上面的方法,下面的方法最快的很快就会追上最慢的,时间不是最短
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <queue> #include <stack> #include <map> #include <cstring> #include <climits> #include <cmath> #include <cctype> const int inf = 0x3f3f3f3f;//1061109567 typedef long long LL; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; int a[100010]; int b[100010]; const double pi = acos(-1.0);//一般用公式求,不然会有精度问题,cos(pi)=-1 bool cmp(int a,int b) { return a > b; } int main() { int t; scanf("%d",&t); while(t--) { int n; double r; scanf("%d%lf",&n,&r); bool flag = true; for(int i=0; i<n; i++) { scanf("%d",&a[i]); if(i != 0) { if(a[i] != a[i-1]) flag = false; } } if(n == 1) { printf("Inf\n"); continue; } if(flag) { printf("Inf\n"); continue; } sort(a,a+n,cmp); int max1 = 0; for(int i=0; i<n-1; i++) { max1 = max(max1,a[i]-a[i+1]); } double l = 2 * pi * r / n / max1 * 1.0; printf("%.3lf\n",l); } }大神写的比较短,可以看一下:http://www.acmerblog.com/hdu-3402-ants-run-5428.html?replytocom=58486