[入门赛#30]不懂就问
  • 板块学术版
  • 楼主lx2009
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/12/13 21:09
  • 上次更新2024/12/14 08:18:38
查看原帖
[入门赛#30]不懂就问
1569314
lx2009楼主2024/12/13 21:09

Problem 8

#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不对?

2024/12/13 21:09
加载中...