PAT (Advanced) 1075. PAT Judge (25)

下面这个代码最后一个3分测试样例始终无法通过,搞得人非常无语。如果你发现了其中的bug,请留言告诉我。非常感谢!

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>

using namespace std;

struct User
{
	int user_id;
	int rank;
	int total_score;
	int problem_score[5];
	bool tried_to[5];
	bool perfectly_solved[5];
	int total_tried;
	int total_perfect;
}user[10001];

bool cmp(const User &a, const User &b)
{
	if (a.total_score != b.total_score)
		return a.total_score > b.total_score;
	else
	{
		if (a.total_perfect != b.total_perfect)
			return a.total_perfect > b.total_perfect;
		else
			return a.user_id < b.user_id;
	}
}

int main()
{
	freopen("in.txt", "r", stdin);
	int N, K, M;
	cin >> N >> K >> M;
	int *full_mark = new int[K];
	for (int i = 0; i < K; i++)
		cin >> full_mark[i];
	int u_id, p_id, part_score;
	for (int i = 0; i < M; i++)
	{
		cin >> u_id >> p_id >> part_score;
		user[u_id - 1].user_id = u_id - 1;
		if (part_score != -1)
		{
			if (part_score > user[u_id - 1].problem_score[p_id - 1])
			{
				user[u_id - 1].total_score = user[u_id - 1].total_score - user[u_id - 1].problem_score[p_id - 1] + part_score;
				user[u_id - 1].problem_score[p_id - 1] = part_score;
			}	
			if (part_score == full_mark[p_id - 1])
				user[u_id - 1].perfectly_solved[p_id - 1] = true;
			user[u_id - 1].total_tried++;
		}
		user[u_id - 1].tried_to[p_id - 1] = true;
	}
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < K; j++)
		{
			if (user[i].perfectly_solved[j] == true)
			user[i].total_perfect++;
		}
	}
	sort(user, user + N, cmp);
	user[0].rank = 0;
	for (int i = 1; i < N; i++)
	{
		if (user[i].total_score == user[i - 1].total_score)
			user[i].rank = user[i - 1].rank;
		else
			user[i].rank = i;
	}
	int i = 0;
	while (user[i].total_tried > 0)
	{
		printf("%d %05d %d", user[i].rank + 1, user[i].user_id + 1, user[i].total_score);
		for (int j = 0; j < K; j++)
		{
			if (user[i].tried_to[j] == true)
				printf(" %d", user[i].problem_score[j]);
			else
				printf(" -");
		}
		printf("\n");
		i++;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值