• hdu acm 1084


    贪心题

    Problem Description
    “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!
     
    Input
    Input 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.
     
    Output
    Output 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 "stdio.h"
    #include "stdlib.h"
    #include "string.h"

    typedef struct{
     int s_num;
     int t_num;
     int time;
     int score;
    }st;

    int cmp_f(const void *a,const void *b)
    {
     st *c=(st *)a;
     st *d=(st *)b;
     if(c->t_num==d->t_num)
      return c->time-d->time;
     else
      return d->t_num-c->t_num;
    }

    int cmp_s(const void *a,const void *b)
    {
     st *c=(st *)a;
     st *d=(st *)b;
     return c->s_num-d->s_num;
    }

    int main()
    {
     int n;
     char tp[9];
     int p_num[6];
     st s[120];
     //int tnum;

     while(scanf("%d",&n)==1&&n>=0)
     {
      memset(p_num,0,sizeof(p_num));
      for(int i=0;i<n;i++)
      {
                    int hh,mm,ss;
       scanf("%d%s",&s[i].t_num,tp);
       //scanf("%d:%d:%d",&hh,&mm,&ss);
       s[i].s_num=i;

       p_num[s[i].t_num]++;//记录题目数量

       //将时间转化成整数,便于排序
       sscanf(tp,"%d:%d:%d",&hh,&mm,&ss);
       s[i].time=hh*3600+mm*60+ss;
      }

      qsort(s,n,sizeof(st),cmp_f);//将结构体数组按题目数排序

      for(int i=0;i<n;i++)
      {
       if(s[i].t_num==5)
        s[i].score=100;
       else if(s[i].t_num==4)
       {
        if(i+1-p_num[5]<=p_num[4]/2)
         s[i].score=95;
        else
         s[i].score=90;
       }
       else if(s[i].t_num==3)
       {
        if(i+1-p_num[5]-p_num[4]<=p_num[3]/2)
         s[i].score=85;
        else
         s[i].score=80;
       }
       else if(s[i].t_num==2)
       {
        if(i+1-p_num[5]-p_num[4]-p_num[3]<=p_num[2]/2)
         s[i].score=75;
        else
         s[i].score=70;
       }
       else if(s[i].t_num==1)
       {
        if(i+1-p_num[5]-p_num[4]-p_num[3]-p_num[2]<=p_num[1]/2)
         s[i].score=65;
        else
         s[i].score=60;
       }
       else
        s[i].score=50;
      }

      qsort(s,n,sizeof(st),cmp_s);//再将其按序号顺序排回来,以便输出,因为题目的输出是按序号顺序来的

      for(int i=0;i<n;i++)
      {
       printf("%d\n",s[i].score);
      }
      printf("\n");
     }

     return 0;
    }

    这一题,第一遍就A了,挺有成就感的,嘿嘿~~~

  • 相关阅读:
    js语法学习(变量类型,循环,判断语句,函数)
    使用IIS Server Farms搭建应用服务负载均衡
    Vue SSR学习
    Vue-3D-Model:用简单的方式来展示三维模型
    vue中的$EventBus.$emit、$on的应用
    Vue.js系列:生命周期钩子
    浅谈vue学习之组件通信
    vue中的provide/inject讲解
    浅谈vue$router 和 $route的区别
    vue 父子component生命周期
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2324998.html
Copyright © 2020-2023  润新知