#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node
{
string name,rt[3];
int id,rank;
}e[500001];
bool cmp(node a,node b){
if(a.rank!=b.rank)return a.rank<b.rank;
else return a.id<b.id;
}
signed main()
{
int n,m,t,k;
cin>>n>>m>>t>>k;
int t1,t2;
for(int i=1;i<=n;i++){
string s[4];
cin>>s[0]>>s[1]>>s[2]>>s[3]>>t1>>t2;
e[i].name=s[0];
e[i].rt[0]=s[1];
e[i].rt[1]=s[2];
e[i].rt[2]=s[3];
e[i].id=t1;
e[i].rank=t2;
}
sort(e+1,e+1+n,cmp);
map<string,string>er;
int ty=0;
string ans[500001][4];
for(int p=1;p<=n;p++){
if(ty>=k)break;
if(er[e[p].rt[0]]=="EC Final" || er[e[p].rt[1]]=="EC Final" ||er[e[p].rt[2]]=="EC Final")continue;
er[e[p].rt[0]]="EC Final";
er[e[p].rt[1]]="EC Final";
er[e[p].rt[2]]="EC Final";
ty++;
ans[ty][0]=e[p].name;
ans[ty][1]=e[p].rt[0];
ans[ty][2]=e[p].rt[1];
ans[ty][3]=e[p].rt[2];
}
cout<<ty<<endl;
for(int i=1;i<=ty;i++){
cout<<ans[i][0]<<" "<<ans[i][1]<<" "<<ans[i][2]<<" "<<ans[i][3]<<endl;
}
return 0;
}
以上是100分代码
然而在这之前
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node
{
string name,rt[3];
int id,rank;
}e[500001];
bool cmp(node a,node b){
if(a.rank!=b.rank)return a.rank<b.rank;
else return a.id<b.id;
}
signed main()
{
int n,m,t,k;
cin>>n>>m>>t>>k;
int t1,t2;
for(int i=1;i<=n;i++){
string s[4];
cin>>s[0]>>s[1]>>s[2]>>s[3]>>t1>>t2;
e[i].name=s[0];e[i].rt[0]=s[1];e[i].rt[1]=s[2];e[i].rt[2]=s[3];
e[i].id=t1;e[i].rank=t2;
}
sort(e+1,e+1+n,cmp);
map<string,string>er;
int ty=0;int p=0;
string ans[500001][4];
while(p<=n && ty<k){
p++;
if(er[e[p].rt[0]]=="EC Final" || er[e[p].rt[1]]=="EC Final" ||er[e[p].rt[2]]=="EC Final")continue;
er[e[p].rt[0]]="EC Final";
er[e[p].rt[1]]="EC Final";
er[e[p].rt[2]]="EC Final";
ty++;
ans[ty][0]=e[p].name;
ans[ty][1]=e[p].rt[0];
ans[ty][2]=e[p].rt[1];
ans[ty][3]=e[p].rt[2];
}
cout<<ty<<endl;
for(int i=1;i<=ty;i++){
cout<<ans[i][0]<<" "<<ans[i][1]<<" "<<ans[i][2]<<" "<<ans[i][3]<<endl;
}
return 0;
}
这是80分 代码
赛时因为这个东西晚AC30min。
问:为什么我将while写成for就对了,且为什么写while不对?