排名

排名

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5070 Accepted Submission(s): 1572
 
Problem Description
今天的上机考试虽然有实时的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.
 

思路:

结构体+排序。


AC代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
#define Pai 3.1415926

struct student
{
	char name[30];
	int nam;
	int tol;
	int num[30];
	int sum;
}s[1100],shu[1100],temp;
bool cmp(struct student a,struct student b)
{
	return a.sum>b.sum;
}
int main()
{
	int i,j,n,m,g,score[20];
	while(~scanf("%d",&n))
	{
	
		if(n==0)
			break;
		scanf("%d%d",&m,&g);
		for(i=1;i<=m;i++)
			scanf("%d",&score[i]);
		for(i=0;i<n;i++)
		{
			s[i].sum=0;s[i].nam=0;
			scanf("%s%d",s[i].name,&s[i].tol);
		
			for(j=2;j<strlen(s[i].name);j++)
			{
				s[i].nam=s[i].nam*10+s[i].name[j]-'0';
			}
			for(j=0;j<s[i].tol;j++)
			{
				scanf("%d",&s[i].num[j]);
				s[i].sum+=score[s[i].num[j]];
			}
		}
	
		sort(s,s+n,cmp);
		int number=0;
		for(i=0;i<n;i++)
		{
			if(s[i].sum>=g){
				shu[i]=s[i];
				number++;
			}
		}
		printf("%d\n",number);
		for(i=0;i<number-1;i++)
		{
			if(s[i].sum==s[i+1].sum){
				for(j=i+1;j<number;j++)
				{
					if(s[i].sum!=s[j].sum)
						break;
					if(shu[i].nam>shu[j].nam)
					{temp=shu[i];shu[i]=shu[j];shu[j]=temp;}
				}
			}
		}
		for(i=0;i<number;i++)
		{
			printf("%s %d\n",shu[i].name,s[i].sum);
		}
	}
	return 0;
}


阅读更多
文章标签: STL 排序
个人分类: 排序 STL
上一篇Tian Ji -- The Horse Racing(田忌赛马)
下一篇EOJ 3451. 易位构词
想对作者说点什么? 我来说一句

中国IT公司百强排名

2010年07月04日 36KB 下载

G5外链排名工具G5外链排名工具

2010年11月26日 55KB 下载

web关键字排名查询工具

2010年12月15日 1.6MB 下载

最新Google SEO排名秘笈权威教程

2012年03月21日 687KB 下载

排名管家排名管家

2012年12月23日 1.51MB 下载

google优化排名技术

2010年08月28日 5.06MB 下载

seo排名优化

2013年09月10日 5.73MB 下载

没有更多推荐了,返回首页

关闭
关闭