样例过了但10分,悬关,码风良好
查看原帖
样例过了但10分,悬关,码风良好
712075
Hedabo_2509楼主2023/9/13 13:56

只有#7和#8过了。。。

#include<bits/stdc++.h>
using namespace std;
struct node{
    int sumac,id,tme;
    string name;
    bool ac[30]={0},ac1[30]={0};
    int tme2[30]={0},wa[30]={0},wa1[30]={0};
}team[100005];
map<string,int> mp;
int n,m,k,now=0,x,y,z;
char pro;
string nam,rec;
bool cmp(node x,node y){
	if(x.sumac!=y.sumac) return x.sumac>y.sumac;
	if(x.tme!=y.tme) return x.tme<y.tme;
	return x.id<y.id;
}
int main(){
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=k;i++){
        bool fb=false;
        scanf("%d:%d:%d %c",&x,&y,&z,&pro);
        cin>>nam;
        getline(cin,rec);
        if(x*3600+y*60+z>4*3600) fb=true;
		if(mp[nam]==0){
		    now++;
		    mp[nam]=now;
		    team[now].id=now;
		    team[now].name=nam;
		}
		if(rec[1]=='A'){
			if((!fb)&&(!team[mp[nam]].ac[pro-'A'])){
				team[mp[nam]].ac[pro-'A']=true;
				++team[mp[nam]].sumac;
				team[mp[nam]].tme+=x*60+y+team[mp[nam]].wa[pro-'A']*20;
			}else if(fb&&(!team[mp[nam]].ac[pro-'A'])&&(!team[mp[nam]].ac1[pro-'A'])){
				team[mp[nam]].ac1[pro-'A']=true;
				team[mp[nam]].tme2[pro-'A']=x*60+y;
			}
		}else if((!team[mp[nam]].ac[pro-'A'])&&(!team[mp[nam]].ac1[pro-'A'])){
			if(!fb) team[mp[nam]].wa[pro-'A']++;
			else team[mp[nam]].wa1[pro-'A']++;
		}
    }
    sort(team+1,team+now+1,cmp);
    //for(int i=now;i>0;i--) cout<<team[i].name<<'\n';
    for(int i=now;i>0;i--){
		cout<<team[i].name<<'\n';
		bool f=false;
		for(int j=0;j<=25;j++){
			if(!team[i].ac[j]&&team[i].ac1[j]){
				team[i].ac[j]=true;
				team[i].sumac++;
				team[i].tme+=team[i].tme2[j]+team[i].wa[j]*20;
				if(cmp(team[i],team[i-1])&&i>1){
					f=true;
					break;
				}
			}
		}
		if(f){
			int res=i;
			while(res>1&&cmp(team[res],team[res-1])){
				swap(team[res],team[res-1]);
				res--;
			}
            i++;
		}
    }
}

记录

2023/9/13 13:56
加载中...