• poj1862---变形虫(贪心)


    题意:两条虫之间碰在一起,质量变为2*sqrt(m1*m2)

    求怎么结合,能使最后的一只虫质量最小

    分析:如果让按从大到小的顺序依次结合,可以使大的数被开方的次数最多,得到的结果更小

    4 3 2 1 

    3,4被开3次,2被开2次,1被开1次,只要按照公式来,一定有数分别被开3,3,2,1次,不过按照大的开更多次,能使得结果更小,不过我没算过...

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    int cmp(const void *a,const void *b)
    {
        return (*(int *)b-*(int *)a);
    }
    int main()
    {
        int a[100],n,i;
        float ans;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        if(n==1)
        {
            printf("%.3f
    ",a[0]*1.0);
            return 0;
        }
        qsort(a,n,sizeof(a[0]),cmp);
        ans=2*sqrt(a[0]*a[1]*1.0);
        for(i=2;i<n;i++)
        {
            ans=2*sqrt(ans*a[i]*1.0);
        }
        printf("%.3f
    ",ans);
        return 0;
    }

    WA:没考虑只一个数的情况

    技巧:在整数运算后*1.0,结果变成浮点数

    for(i=2;i<n;i++)
        {
            ans=2*sqrt(ans*a[i]*1.0);
        }
  • 相关阅读:
    Windows XP中万能断点
    c#运算符 ?
    转神秘的程序员
    经典解决“线程间操作无效
    文件上传
    dowload.aspx
    mail
    js 正则
    新年快乐
    DataTable Compute
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4527690.html
Copyright © 2020-2023  润新知