zoukankan      html  css  js  c++  java
  • HDOJ1084 What Is Your Grade?

    What Is Your Grade?

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 8302    Accepted Submission(s): 2547


    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

    这破题WA了9次才过 ⊙﹏⊙b汗

    #include <cstdio>
    #include <algorithm>
    using std::sort;
    
    struct Node{
    	int pos, num, s, val;
    } stu[102];
    int arr[6];
    
    bool cmp1(Node a, Node b)
    {
    	if(a.num == b.num) return a.s < b.s;
    	return a.num > b.num;
    }
    
    bool cmp2(Node a, Node b)
    {
    	return a.pos < b.pos;
    }
    
    int main()
    {
    	int n, h, m, s, num;
    	while(scanf("%d", &n) == 1 && n > 0){
    		for(int i = 1; i < 6; ++i) arr[i] = 0;
    		for(int i = 0; i < n; ++i){
    			scanf("%d %d:%d:%d", &num, &h, &m, &s);
    			s += m * 60 + h * 3600;
    			
    			stu[i].pos = i;
    			stu[i].num = num;
    			stu[i].s = s;
    			stu[i].val = 100 - (5 - num) * 10;
    			++arr[num];
    		}
    		
    		sort(stu, stu + n, cmp1);
    		
    		for(int i = 4, pos = 0; i; --i){
    			if(arr[i]){
    				while(stu[pos].num != i) ++pos;
    				if(arr[i] == 1) stu[pos++].val += 5;			
    				for(int j = 0; j < arr[i] / 2; ++j)
    					stu[pos++].val += 5;
    			}
    		}
    		
    		sort(stu, stu + n, cmp2);
    		
    		for(int i = 0; i < n; ++i)
    			printf("%d
    ", stu[i].val);
    		printf("
    ");
    	}
    	return 0;
    }


  • 相关阅读:
    C++中使用多线程
    hdu 4223 dp 求连续子序列的和的绝对值最小值
    hdu 1372 bfs 计算起点到终点的距离
    hdu 4217 线段树 依次取第几个最小值,求其sum
    心得
    hdu 1175 bfs 按要求进行搜索,是否能到达,抵消两个(相同)棋子
    hdu 4221 greed 注意范围 工作延期,使整个工作时间罚时最少的单个罚时最长的值
    hdu 2844 多重背包 多种硬币,每一种硬币有一点数量,看他能组成多少种钱
    uva LCDDisplay
    hdu 4218 模拟 根据一个圆点和半径画一个圆 注意半径要求
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5192827.html
Copyright © 2011-2022 走看看