HDU 1236(位)

基本的な質問には、必要な入力に応じて並べ替えることができます。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1005;

struct student //考生
{
	char number[30]; //考号
	int score; //分数
}s[MAXN];

//排序标准,分数从大到小,分数相同时,考号从小到大
bool cmp(student s1, student s2)
{
	if (s1.score != s2.score)
		return s1.score > s2.score;
	else
		return strcmp(s1.number, s2.number) < 0;
}

int main()
{
	int N, M, G; //考生人数,考题数,分数线
	int proScore[15]; //题目分数
	while (scanf("%d", &N))
	{
		if (N == 0)
			break;

		memset(proScore, 0, sizeof(proScore));
		scanf("%d%d", &M, &G);
		for (int i = 1; i <= M; i++) //输入各题目的分数
		{
			scanf("%d", &proScore[i]);
		}

		int m; //考生解题数量
		int sumScore; //考生成绩
		int temp; //考生解题序号
		for (int i = 0; i < N; i++)
		{
			scanf("%s %d", s[i].number, &m);
			sumScore = 0;
			for (int i = 0; i < m; i++) //计算考生的成绩
			{
				scanf("%d", &temp);
				sumScore += proScore[temp];
			}
			s[i].score = sumScore;
		}

		sort(s, s + N, cmp); //排序

		int index; //上线考生的数量
		for (index = 0; index < N; index++)
		{
			if (s[index].score < G)
				break;
		}
		printf("%d\n", index);
		for (int i = 0; i < index; i++)
			printf("%s %d\n", s[i].number, s[i].score);
	}
	return 0;
}

続けてください。

公開された152元の記事 ウォンの賞賛1 ビュー7608

おすすめ

転載: blog.csdn.net/Intelligence1028/article/details/104704962