A1075(25)未完美通过

坑点太多了,建议看晴神和柳神算法,自己debug搞了好久,最后一个测试点还是没过,准备今天晚上重写一遍,坑到想流泪😭

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;
const int maxn=10010;
struct node
{
	int id;
	int total,score[6];
	int flag;
}a[maxn];
bool cmp(node b,node c)
{
	if (b.total!=c.total)return b.total>c.total;
	else if (b.score[0]!=c.score[0])return b.score[0]>c.score[0];
	else return b.id<c.id;
}
int main()
{
	int n,k,m;
	cin>>n>>k>>m;
	vector<int> max1(k+1);
	for (int i=1;i<=k;i++)
	{
		scanf("%d",&max1[i]);
	}
	for (int i=1;i<=n;i++)
	{
		for (int j=0;j<k+1;j++)
		{
			a[i].score[j]=-1;
		}
			a[i].total=0;
			a[i].flag=0;
	}
	for (int i=0;i<m;i++)
	{
		int id,num,score;
		scanf("%d %d %d",&id,&num,&score);
		a[id].id=id;
        if(a[id].score[num]==-1)
            {
                a[id].score[num]=0;
            }
		if (score>=a[id].score[num]&&score<=max1[num])
		{
			a[id].total-=a[id].score[num];
			a[id].score[num]=score;
			a[id].total+=a[id].score[num];
			if(a[id].score[num]==max1[num])
			{
			    a[id].score[0]++;
			}
			a[id].flag=1;
		}
	}
	a[0].total=-1;
	sort(a,a+n+1,cmp);
	int rank=1;
	for (int i=0;i<n;i++)
	{
		if(a[i].flag==1)
		{
			if (i==0)
			printf("%d",rank);
			else if (a[i].total==a[i-1].total)
		   {
	    	rank--;
	    	printf("%d",rank);
	     	}
		 	else
			{
				printf("%d",i+1);
			}
			printf(" %05d %d",a[i].id,a[i].total);
			for (int j=1;j<=k;j++)
			{
				if(a[i].score[j]==-1)
				printf(" -");
				else
				printf(" %d",a[i].score[j]);
			}
			printf("\n");
			rank++;
		}
	}
}
/*2 3 4
20 30 40
1 1 15
1 3 20
2 3 0
2 2 0*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值