zoukankan      html  css  js  c++  java
  • HDU 1236 排名(结构体+排序)

    今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 
    每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的 
    考生,并将他们的成绩按降序打印。 

    Input测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N 
    < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一 
    名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号 
    (题目号由1到M)。 
    当读入的考生人数为0时,输入结束,该场考试不予处理。 
    Output对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高 
    到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考 
    号的升序输出。 
    Sample Input

    4 5 25
    10 10 12 13 15
    CS004 3 5 1 3
    CS003 5 2 4 1 3 5
    CS002 2 1 2
    CS001 3 2 3 5
    1 2 40
    10 30
    CS001 1 2
    2 3 20
    10 10 10
    CS000000000000000001 0
    CS000000000000000002 2 1 2
    0

    Sample Output

    3
    CS003 60
    CS001 37
    CS004 37
    0
    1
    CS000000000000000002 20
    

    Hint

    Huge input, scanf is recommended.
    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define N 1010
    int que[15];
    
    struct node
    {
    	char str[22];
    	int num;
    	int score;
    }stu[N];
    
    bool cmp(const node &a, const node &b)
    {
    	if(a.score == b.score)
    		return strcmp(a.str, b.str) < 0 ? 1 : 0; //按字典序升序
    	else
    		return a.score > b.score;
    }
    
    int main()
    {
    	int student, question, judge, x, count;
    	while(scanf("%d", &student) && student)
    	{
    		count = 0;
    		for(int i = 1; i <= student; ++i)
    		{
    			stu[i].score = 0;
    			stu[i].num = 0;
    		}
    		scanf("%d%d", &question, &judge);
    		for(int i = 1; i <= question; ++i)
    			scanf("%d", &que[i]);
    		for(int i = 1; i <= student; ++i)
    		{
    			scanf("%s%d", stu[i].str, &stu[i].num);
    			while(stu[i].num--)
    			{
    				scanf("%d", &x);
    				stu[i].score += que[x];
    			}
    			if(stu[i].score >= judge)
    					count++;
    		}
    		sort(stu + 1, stu + 1 + student, cmp);
    		printf("%d
    ", count);
    		for(int i = 1; i <= student; ++i)
    		{
    			if(stu[i].score >= judge)
    				printf("%s %d
    ", stu[i].str, stu[i].score);
    			else
    				break;
    		}
    	}
    	return 0;
    }
      
    

      

  • 相关阅读:
    Recommended Books for Algo Trading in 2020
    Market Making is simpler than you think!
    Top Crypto Market Makers of 2020
    Top Crypto Market Makers, Rated and Reviewed
    爬取伯乐在线文章(五)itemloader
    爬取伯乐在线文章(四)将爬取结果保存到MySQL
    爬取伯乐在线文章(三)爬取所有页面的文章
    爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容
    爬取伯乐在线文章(一)
    爬虫去重策略
  • 原文地址:https://www.cnblogs.com/Roni-i/p/7211263.html
Copyright © 2011-2022 走看看