zoukankan      html  css  js  c++  java
  • TOJ 4095: love168yk的选美大赛

    4095: love168yk的选美大赛 分享至QQ空间

    Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
    Total Submit: 51            Accepted:7

    Description

     

    话说最近love168yk参加了数信学院的选美大赛,跟他同台参加的还有N-1位MM,love168yk自知没有多大希望赢得比赛,但是他又不想这么早就被淘汰(分数最低就被淘汰),只要每个人的分数一样他就熬过第一轮预选赛了,分数是由两部分组成的,一部分是裁判给的分数,另一部分是观众给的,每个人一开始都有裁判给的分Ji,分数层次不齐,接着观众投票阶段就看观众对于选手的支持率Yi了,观众的支持率按百分比来算,且每个观众最多给一位选手投票,也就是说总的支持率加起来刚好是1,总分是选手得到的裁判分+观众支持率*总裁判分(N个人得到的裁判分总和X)即Ji+Yi*X,分数最低的就淘汰了,现在让你写一个程序来,让你计算出每个选手应得到多少的支持率,满足不能出现单个最低分数,应为出现了单个最低就将被淘汰,且要满足每个人得到的支持率最小,且不可能出现裁判总分为0的情况!!!

    Input

     

    测试数据有多组,第一行T表示有T组数据,接下来T行,每行的第一个数字N表示有多少参赛选手,后面跟着N个数据Ji都用空格隔开。2<N<200,  0>=Ji<=100.

    Output

     

    每组测试数据每行输出"Case #x: ",接着N个数据分别表示每位选手应得得支持率mi,x从1开始,mi保留两位小数。

    Sample Input 

    4
    2 20 10
    2 10 0
    4 25 25 25 25
    3 24 30 21

    Sample Output

     

    Case #1: 33.33 66.67
    Case #2: 0.00 100.00
    Case #3: 25.00 25.00 25.00 25.00
    Case #4: 34.67 26.67 38.67

    这个题还是比较好的,早上写了一下wa,下午搬完书回来就在想

    最早的贪心过程就是按照权值其实和求全部数的平均数思想一样,不过是绕了个弯

    提交一发wa,然后发现可能有输出负数的操作,又交了几发

    最后我的贪心过程是选小的数看它们最多能加到多少,然后求下平均数,大数均输出0.00就好

    其实这个题就限制了只能用类似的贪心过程,下面的数相加可能大于100也可能小于100的

    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    int a[205],b[205];
    int main()
    {
        int T;
        while(~scanf("%d",&T))
        {
            int k=1;
            while(T--)
            {
                int n,s1=0;
                scanf("%d",&n);
                for(int i=1; i<=n; i++)
                {
                    scanf("%d",&a[i]);
                    b[i]=a[i];
                    s1+=a[i];
                }
                sort(b+1,b+n+1);
                int f=n,s=b[1];
                for(int i=2; i<=n; i++)
                {
                    s+=b[i];
                    if(s+s1<i*b[i])
                    {
                        f=i-1;
                        s-=b[i];
                        break;
                    }
                }
                s+=s1;
                printf("Case #%d:",k++);
                for(int i=1; i<=n; i++)
                    if(a[i]>b[f])
                        printf(" 0.00");
                    else
                        printf(" %.2f",(s*1./f-a[i])*100/s1);
                putchar(10);
            }
        }
        return 0;
    }

     

     

  • 相关阅读:
    ubuntu装openssh-client和openssh-server
    路由器开源系统openwrt配置页面定制
    linux 串口接收
    SHA算法
    密码学Hash函数
    椭圆曲线加密
    ElGamal密码
    Diffie-Hellman密钥交换
    RSA加密
    公钥密码学
  • 原文地址:https://www.cnblogs.com/BobHuang/p/7469664.html
Copyright © 2011-2022 走看看