zoukankan      html  css  js  c++  java
  • 杭电OJ—— 1084 What Is Your Grade?

    What Is Your Grade?

    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
     
    Author
    lcy
     
         题目不是很难,注意一下输出格式还有一些别的东西就可以了!我下面写的程序貌似长了一点,不过意思明了,凑合着看吧!很久没写了,练练手!
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int SIZE = 101;
    
    typedef struct    /*结构体,用于存储输入的数据*/
    {
    	int solved;   /*解决问题的数目*/
    	int located;  /*学生的位置*/
    	int h, m, s;  /*所花费的时间*/
    	int soc;      /*最终的成绩*/
    }time;
    
    bool cmp(time &bi1, time &bi2)    /*比较函数,用于排序*/
    {
    	if (bi1.h > bi2.h) return false;
    	else if (bi1.h < bi2.h) return true;
    	else 
    	{
           if (bi1.m > bi2.m) return false;
    	   else if (bi1.m < bi2.m) return true;
    	   else
    	   {
    		   if (bi1.s > bi2.s) return false;
    	       else if (bi1.s < bi2.s) return true;
    	   }
    	}
    }
    
    int main()
    {
    	int num;
    	time stu[SIZE];
    	time sortArr[4][SIZE];
    	int p, q , r, k, i;
    	while((cin >> num) && (num >= 0))
    	{
    	    p = q = r = k = 0;
    		for (i = 0; i < num; i++)
    		{
    			cin >> stu[i].solved;
    			scanf ("%d:%d:%d", &stu[i].h, &stu[i].m, &stu[i].s);
    			stu[i].located = i;  /*记录下输入时的位置*/
    
    			/*下面的思路就是:分数能处理的就处理,如解决了5道题(100)和0道题(50)
    			不能处理的话,我们先将该数分类存入一个数组,之后再做处理
    			*/
    			if (stu[i].solved == 5)
    			{
    				stu[i].soc = 100;
    			}
    			if (stu[i].solved == 4)
    			{
    				sortArr[0][p] = stu[i];
    				p++;
    			}
    			if (stu[i].solved == 3)
    			{
    				sortArr[1][q] = stu[i];
    				q++;
    			}
    			if (stu[i].solved == 2)
    			{
    				sortArr[2][r] = stu[i];
    				r++;
    			}
                if (stu[i].solved == 1)
    			{
    				sortArr[3][k] = stu[i];
    				k++;
    			}
    			if (stu[i].solved == 0)
    			{
    				stu[i].soc = 50;
    			}
    		}
    
    		if (p >= 1)
    		{
    			sort (sortArr[0], sortArr[0] + p, cmp);  /*先排序,按照耗时从小到大排序*/
    			for (i = 0; i < p / 2; i++) /*前半部分得高分*/
    			{
    				stu[sortArr[0][i].located].soc = 95;
    			}
    			for (; i < p; i++)  /*后半部分得低分*/
    			{
    				stu[sortArr[0][i].located].soc = 90;
    			}
    		}
    		/*以下类似*/
    		if (q >= 1)
    		{
    			sort (sortArr[1], sortArr[1] + q, cmp);
    			for (i = 0; i < q / 2; i++)
    			{
    				stu[sortArr[1][i].located].soc = 85;
    			}
    			for (; i < q; i++)
    			{
    				stu[sortArr[1][i].located].soc = 80;
    			}
    		}
    
    		if (r >= 1)
    		{
    			sort (sortArr[2], sortArr[2] + r, cmp);
    			for (i = 0; i < r / 2; i++)
    			{
    				stu[sortArr[2][i].located].soc = 75;
    			}
    			for (; i < r; i++)
    			{
    				stu[sortArr[2][i].located].soc = 70;
    			}
    		}
    
    		if (k >= 1)
    		{
    			sort (sortArr[3], sortArr[3] + k, cmp);
    			for (i = 0; i < k / 2; i++)
    			{
    				stu[sortArr[3][i].located].soc = 65;
    			}
    			for (; i < k; i++)
    			{
    				stu[sortArr[3][i].located].soc = 60;
    			}
    		}
    
    		for (i = 0; i < num; i++)
    		{
    			cout << stu[i].soc << endl;
    		}
    		cout << endl;
    	}
    	system ("pause");
    	return 0;
    }


  • 相关阅读:
    Linux(Centos7)yum安装最新redis
    refresh table tablename ;MSCK REPAIR TABLE table_name;
    整个shuffle的流程图
    Vim简明教程
    centos vim 7.3 升级 + vim 简单配置文件
    Python——可变类型与不可变类型(即为什么函数默认参数要用元组而非列表)
    python——修饰符
    转——《将人性置之死地而后生》刘夙
    各学科领域入门书籍推荐
    python——关于Python Profilers性能分析器
  • 原文地址:https://www.cnblogs.com/riskyer/p/3221748.html
Copyright © 2011-2022 走看看