10分求助
查看原帖
10分求助
759261
wangweichen666楼主2023/8/8 17:18
#include<bits/stdc++.h>
using namespace std;
int n,m,k,ans=0;
struct note{
	int x,yy,zz,ts;
	char problem;
	string team,zt;
	bool tg=false;
}a[10005];
struct team{
	int fs[28],tgts,ci=0,id,pm,pmzs;
	string name;
	bool tgt[28]={false};
}b[1005];
int cmp(team x,team y){
	if(x.tgts==y.tgts){
		for(int i=1;i<=n;i++)
			if(x.fs[i]>y.fs[i])
				return y.fs[i]<x.fs[i];
			else if(x.fs[i]<y.fs[i])
				return x.fs[i]<y.fs[i];
		return x.id<y.id;
	}
	else return x.tgts<y.tgts;
	
}
bool tf=false;
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=k;i++){
		scanf("%d:%d:%d",&a[i].x,&a[i].yy,&a[i].zz);
		cin>>a[i].problem>>a[i].team;
		getline(cin,a[i].zt);
		a[i].ts=a[i].problem-64;
	}
	for(int i=1;i<=k;i++){
		if(ans==m) break;
		tf=false;
		for(int j=1;j<=i;j++)
			if(a[j].team==a[i].team&&i!=j){
				tf=true;
				break;
			}
		if(!tf) b[ans+1].name=a[i].team,ans++,b[ans+1].id=ans+1;
	}
	ans=0;
	for(int i=1;i<=k;i++){
		for(int j=1;j<=m;j++)
			if(b[j].name==a[i].team&&(a[i].x<4||(a[i].x==4&&a[i].yy==0&&a[i].zz==0)))
				if(a[i].zt=="Accepted"&&!b[j].tgt[a[i].ts]){
					b[j].fs[a[i].ts]=a[i].yy+a[i].x*60+b[j].ci*20;	
					b[j].tgt[a[i].ts]=true;
					b[j].tgts++;
					a[i].tg=true;
				}else if(!b[j].tgt[a[i].ts]) b[j].ci++,a[i].tg=true;
	}
	sort(b+1,b+m+1,cmp);
	for(int i=1,j=m;i<=m,j>=1;i++,j--)
		cout<<b[i].name<<endl,b[i].pm=b[i].pmzs=j;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=k;j++)
			for(int x=1;x<=m;x++)
				if(a[j].zt=="Accepted"&&!b[x].tgt[a[j].ts]&&a[j].ts==i){
					b[x].fs[a[j].ts]=a[j].yy+a[j].x*60+b[x].ci*20;	
					b[x].tgt[a[j].ts]=true;
					b[x].tgts++;
					a[j].tg=true;
				}else if(!b[x].tgt[a[j].ts]) b[x].ci++,a[j].tg=true;
		sort(b+1,b+m+1,cmp);
		for(int j=m;j>=1;j--)
			b[j].pm=j;
		for(int j=1;j<=m;j++)
			if(b[j].pm!=b[j].pmzs&&b[j].pm<b[j].pmzs) cout<<b[j].name<<endl;
		for(int j=m;j>=1;j--)
			b[j].pmzs=b[j].pm;
	}
	return 0;
}
2023/8/8 17:18
加载中...