zoukankan      html  css  js  c++  java
  • F

    “Point, point, life of student!” 
    This is a ballad(歌谣)well known in colleges, and you must care about your score in this exam too. How many points can you get? Now, I told you the rules which are used in this course. 
    There are 5 problems in this final exam. And I will give you 100 points if you can solve all 5 problems; of course, it is fairly difficulty for many of you. If you can solve 4 problems, you can also get a high score 95 or 90 (you can get the former(前者) only when your rank is in the first half of all students who solve 4 problems). Analogically(以此类推), you can get 85、80、75、70、65、60. But you will not pass this exam if you solve nothing problem, and I will mark your score with 50. 
    Note, only 1 student will get the score 95 when 3 students have solved 4 problems. 
    I wish you all can pass the exam! 
    Come on! 

    InputInput contains multiple test cases. Each test case contains an integer N (1<=N<=100, the number of students) in a line first, and then N lines follow. Each line contains P (0<=P<=5 number of problems that have been solved) and T(consumed time). You can assume that all data are different when 0<p. 
    A test case starting with a negative integer terminates the input and this test case should not to be processed. 
    OutputOutput the scores of N students in N lines for each case, and there is a blank line after each case. 
    Sample Input

    4
    5 06:30:17
    4 07:31:27
    4 08:12:12
    4 05:23:13
    1
    5 06:30:17
    -1

    Sample Output

    100
    90
    90
    95
    
    100

    刚看到这个题目的时候有点懵,但是尝试着写了一下。。。。思路简单的很

    #include<iostream>
    #include<algorithm>
    #include<string> 
    #include<cstdio>
    #include<math.h>
    using namespace std;
    struct stu
    {
        int a;
        string b;
        int c;//记录当前的分数 
    };
    //先用sort对副本数组num2排序,a优先,b其次,c不用管 ,最后在转换为num1
    bool cmp(stu x,stu y)
    {
        if(x.a!=y.a)
            return x.a>y.a;
        return x.b<y.b;//时间取较小的 
    }
    int main()
    {
        int n;
        while(cin>>n)
        {
            int s[6]={0};//,一定要定义在循环内部,,,错了好几次 
            struct stu num1[111],num2[111];
            if(n<0)
                break;
                
            for(int i=0;i<n;i++)
            {
                cin>>num1[i].a>>num1[i].b;
                num2[i].a=num1[i].a;
                num2[i].b=num1[i].b;
                s[num1[i].a]++;//记录每个值出现的次数 
            }
            
            sort(num2,num2+n,cmp);
            int x=0,y=0,z=0,w=0;
            for(int i=0;i<n;i++)
            {
                if(num2[i].a==5)
                {
                    num2[i].c=100;
                }
                
                else if(num2[i].a==4)
                {
                    x++;//记录4出现的次数 
                    if(s[4]==1)
                        num2[i].c=95;
                    else
                    {
                        if(s[4]/2>=x)//如果4出现的次数比中值小 则赋值为95,否则 90 
                        {
                            num2[i].c=95;
                        }
                        else
                        {
                            num2[i].c=90;
                        }
                     }
                }
                else if(num2[i].a==3)
                {
                    y++;
                    if(s[3]==1)
                        num2[i].c=85;
                    else
                    {
                        if(s[3]/2>=y)
                        {
                            num2[i].c=85;
                        }
                        else 
                        {
                            num2[i].c=80;
                        }
                     }
                }
                else if(num2[i].a==2)
                {
                    z++;
                    if(s[2]==1)
                        num2[i].c=75;
                    else
                    {
                        if(s[2]/2>=z)
                        {
                            num2[i].c=75;
                        }
                        else
                        {
                            num2[i].c=70;
                        }
                     }
                }
                
                else if(num2[i].a==1)
                {
                    w++;
                    if(s[1]==1)
                        num2[i].c=65;
                    else
                    {
                        if(s[1]/2>=w)
                        {
                            num2[i].c=65;
                        }
                        else 
                        {
                            num2[i].c=60;
                        }
                     }
                }
                else if(num2[i].a==0)
                {
                    num2[i].c=50;
                }
            }
            //转换  根据num2 对num1 中的c赋值 
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(num1[i].a==num2[j].a && num1[i].b==num2[j].b)
                    {
                        num1[i].c=num2[j].c;
                        break;
                    }
                }
            }
            for(int i=0;i<n;i++)
                 cout<<num1[i].c<<endl;
            cout<<endl;
        }
        return 0;
    }
    //自己造的数据 
    /*
    15
    5 06:30:17
    4 07:31:27
    4 08:12:12
    4 05:23:13
    4 06:30:17
    3 05:23:13
    3 05:23:12
    3 05:23:11
    3 05:23:10
    3 05:23:09
    2 06:30:17
    2 06:30:12
    1 05:23:01
    0 08:12:12
    */
  • 相关阅读:
    解决mysql错误1130的方法(远程出错)
    取消pve无效订阅弹窗命令
    测试环境主机执行脚本
    OpenStack Ocata版本安装
    OpenStack简介
    JVM内存分配及调优方案(基于JDK1.8)
    大数据之数据仓库
    clickhouse核心引擎MergeTree子引擎
    clickhouse高可用-节点宕机数据一致性方案-热扩容
    Clickhouse集群部署
  • 原文地址:https://www.cnblogs.com/Accepting/p/11208197.html
Copyright © 2011-2022 走看看