题目地址: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