为什么 Easy Ver. 的代码改动之后在此题提交全部 WA?对拍无果。
查看原帖
为什么 Easy Ver. 的代码改动之后在此题提交全部 WA?对拍无果。
1308728
xsmfollower楼主2024/7/16 19:39

我 Easy Ver. 的代码可见 https://www.luogu.com/article/nkrt3zt6

就改了个数组大小和 map->unordered_map.

#include<bits/stdc++.h>
using namespace std;
const int N=30,M=2e5+10;
struct Team {
  string name;
  int pas,tim,id;
  int pt[N],st[N],t[N];
  bool ac[N],fac[N];
  bool operator <(const Team &b) const {
  	if(pas!=b.pas) return pas>b.pas;
  	if(tim!=b.tim) return tim<b.tim;
  	return id<b.id;
  }
}a[M];
int main() {
  int n,m,k,cnt=0; unordered_map<string,int>idx; scanf("%d %d %d",&n,&m,&k);
  while(k--) {
  	int h,m,s; char p; string nm,sta; scanf("%d:%d:%d %c",&h,&m,&s,&p),cin>>nm,getline(cin,sta);
  	if(!idx[nm]) cnt++,idx[nm]=a[cnt].id=cnt,a[cnt].name=nm;
  	int x=idx[nm],y=p-'A'+1;
  	if(a[x].ac[y]) continue;
  	if(sta!=" Accepted") { a[x].st[y]++; continue; }
  	a[x].ac[y]=true,a[x].t[y]=h*60+m;
  	if(h*3600+m*60+s>14400) a[x].fac[y]=true;
  	else a[x].pas++,a[x].pt[y]=a[x].t[y]+a[x].st[y]*20,a[x].tim+=a[x].pt[y];
  }
  priority_queue<Team>q;
  for(int i=1;i<=m;i++) q.push(a[i]);
  while(q.size()>1) {
  	Team x=q.top(); q.pop(),cout<<x.name<<'\n';
  	Team y=q.top(); q.pop();
  	for(int i=1;i<=n;i++)
  	  if(x.fac[i]) {
  	    x.pas++,x.tim+=x.t[i]+x.st[i]*20,x.fac[i]=false;
  	    if(x<y) { q.push(x); break; }
	  }
	q.push(y);
  }
  cout<<q.top().name;
  return 0;
}
2024/7/16 19:39
加载中...