ANTS RUN

  • ants run
  • 题目描述
  • 在一个圆盘上有一群蚂蚁围成一圈相互追逐,每只蚂蚁具有的速度不同,当有一只蚂蚁追上它前面的那只时计时结束,求蚂蚁互不相遇的最长时间。
  • 输入
  • 第一行输入T<10000代表需要解决的问题个数,下一行输入N,R代表蚂蚁的个数与圆盘的半径,再下一行输入每只蚂蚁的速度,所有值应小于20.
  • 输出
  • 若不会相遇输出inf,否则输出最长时间。
  • 样例输入
    2
    3 1
    1 1 1
    3 1
    3 2 1
  • 样例输出
    inf
    3.142
    题目分析,应用了简单的贪心法,将速度最快的蚂蚁尽量往后放,使时间最长,表达式在数值上等于:圆盘周长/(Vmax-Vmin)(理想最长时间实际t<=该值)因为蚂蚁的顺序不能改变,所以只能分配不同距离使其无限接近上面的情况。
    ANTS RUN_第1张图片
  • 上代码
#include
#include
double pi = acos(-1.0);//定义的PI最精确,防止出现错误
int N, T;
double r;
int s[30];
int main(){
 scanf("%d", &T);
 for(int i=1;i<=T;i++){
  scanf("%d", &N);
  scanf("%lf", &r);
  for(int i=1;i<=N;i++){
   scanf("%d", &s[i]);
  }
  s[0] = s[N];//最后一个追第一个
  int sum=0;
  for(int i=1;i<=N;i++){
   if(s[i-1]>s[i]) sum=sum+s[i-1]-s[i];}
   if(sum==0) printf("inf\n");
   else printf("%.3lf", 2*pi*r/sum);
  
  }
  return 0;
}

你可能感兴趣的:(笔记)