求助:赛时代码编译失败
  • 板块灌水区
  • 楼主Komodo
  • 当前回复8
  • 已保存回复8
  • 发布时间2020/11/8 12:04
  • 上次更新2023/11/5 08:29:38
查看原帖
求助:赛时代码编译失败
92840
Komodo楼主2020/11/8 12:04

RT. 我在本机和赛场上代码均编译成功。洛谷评测时变量名重名。 我不会这题爆零吧。。。

#include<bits/stdc++.h>
using namespace std;
int n;
int a[1000010];
bool first=1;
set<pair<int,int> >s;
int per[1000010],kill[1000010];
int alive[1000010];
void work(){
	memset(alive,0,sizeof(alive));
	memset(per,0,sizeof(per));
	memset(kill,0,sizeof(kill));
	s.clear();
	if(first){
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			scanf("%d",a+i);	
		}
		first=0;
	}else{
		int k;
		scanf("%d",&k);
		for(int i=1;i<=k;i++){
			int x,y;
			scanf("%d%d",&x,&y);
			a[x]=y;
		}
	}
	for(int i=1;i<=n;i++){
		s.insert(make_pair(a[i],i));
	}
	int i=1;
	while(s.size()>1){
		set<pair<int,int> >::iterator it=s.end();
		it--;
		int x=(*s.begin()).second,xv=(*s.begin()).first,y=(*it).second,yv=(*it).first;
		s.erase(s.begin());
		s.erase(it);
		per[i]=y;
		kill[i]=x;
		alive[x]=i;
		s.insert(make_pair(yv-xv,y));
		i++;
	}
	for(int i=n-1;i>=1;i--){
		if(alive[per[i]]!=0){
			for(int j=i;j<n;j++)alive[kill[j]]=0;
		}
	}
	//for(int i=1;i<=n-1;i++)printf("%d\n",kill[i]);
	int ans=0;
	for(int i=1;i<=n;i++)if(alive[i]==0)ans++;
	printf("%d\n",ans);
}
int main(){
	freopen("snakes.in","r",stdin);
	freopen("snakes.out","w",stdout);
	int T;
	scanf("%d",&T);
	while(T--)work();
	return 0;
}

2020/11/8 12:04
加载中...