为啥RE啊
  • 板块学术版
  • 楼主ccjjxx
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/11/2 23:29
  • 上次更新2023/10/27 04:27:33
查看原帖
为啥RE啊
486150
ccjjxx楼主2022/11/2 23:29

Segmentation fault with invalid memory reference

提高组T1 T2 T3都是这样。。。

T1代码:

//T1 holiday
#include<stdio.h>
using namespace std;
long long n,m,k;
long long p[100010];
long long a[100010][100010];
long long cnt[100010];
long long max=0;
inline long long read(){
	register long long s=0,w=1;
	register char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			w=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return s*w;
}
int main()
{
	scanf("%lld%lld%lld",&n,&m,&k);
	for(register int i=2;i<=n;++i)
	{
		p[i]=read();
	}
	register int t,w;
	for(register int i=1;i<=m;++i)
	{
		t=read();
		w=read();
		if(t==1)
		{
			cnt[1]++;
			a[1][cnt[1]]=w;
			a[w][0]=1;
		}
		else if(w==1)
		{
			a[t][0]=1;
		}
		else
		{
			cnt[t]++;
			cnt[w]++;
			a[t][cnt[t]]=w;
			a[w][cnt[w]]=t;
		}
	}
	for(register int i=1;i<=cnt[1];++i)
	{
		for(register int j=1;j<=cnt[a[1][i]];++j)
		{
			for(register int k=1;k<=cnt[a[a[1][i]][j]];++k)
			{
				for(register int l=1;l<=cnt[a[a[a[1][i]][j]][k]];++l)
				{
						if(a[a[a[a[a[1][i]][j]][k]][l]][0])
						{
						register long long ans=0;
						ans=p[a[1][i]]+p[a[a[1][i]][j]]+p[a[a[a[1][i]][j]][k]]+p[a[a[a[a[1][i]][j]][k]][l]];
						if(ans>max)
						{
							max=ans;
						}
					}
				}
			}
		}
	}
	printf("%lld",max);
	return 0;
}

T2代码:

//T2 game
#include<stdio.h>
#define int long long
using namespace std;
int n,m,q;
int a[100010],b[100010];
int map[100001][100001];
int r1,r2,l1,l2;
inline int read()
{
	register int s=0,w=1;
	register char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		{
			w=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return s*w;
}
signed main()
{
	scanf("%lld%lld%lld",&n,&m,&q);
	for(register int i=1;i<=n;++i)
	{
		a[i]=read();
	}
	for(register int i=1;i<=m;++i)
	{
		b[i]=read();
	}
	for(register int i=1;i<=n;++i)
	{
		for(register int j=1;j<=m;++j)
		{
			map[i][j]=a[i]*b[j];
		}
	}
	while(q--)
	{
		l1=read(),r1=read(),l2=read(),r2=read();
		register int maxval=-2147483647,maxn=0;
		register int min[100010];
		for(register int i=l1;i<=r1;++i)
		{
			min[i]=0x7fffffff;
		}
		for(register int i=l1;i<=r1;++i)
		{
			for(register int j=l2;j<=r2;++j)
			{
				if(map[i][j]<min[i])
					min[i]=map[i][j];
			}
		}
		for(register int i=l1;i<=r1;++i)
		{
			if(min[i]>maxval)
			{
				maxn=i;
				maxval=min[i];
			}
		}
		printf("%lld\n",min[maxn]);
	}
	return 0;
}

T3代码:

//T3 Galaxy
#include<stdio.h>
#define int long long
using namespace std;
int n,m;
int u,v;
long long a[500001][500001];
long long cnt[500010];
int sit[500001][500001];
inline int read()
{
	register int s=0,w=1;
	register char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		{
			w=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return s*w;
}
int q,t;
signed main()
{
	scanf("%lld%lld",&n,&m);
	for(register int i=1;i<=m;++i)
	{
		u=read(),v=read();
		cnt[u]++;
		a[u][cnt[u]]=v;
		sit[u][v]=1;
	}
	scanf("%lld",&q);
	while(q--)
	{
		scanf("%lld",&t);
		if(t==1)
		{
			u=read(),v=read();
			sit[u][v]=-1;
		}
		else if(t==2)
		{
			u=read();
			for(register int i=1;i<=n;++i)
			{
				for(register int j=1;j<=cnt[i];++j)
				{
					if(a[i][j]==u)
					{
						sit[i][u]=-1;
					}
				}
			}
		}
		else if(t==3)
		{
			u=read(),v=read();
			sit[u][v]=1;
		}
		else
		{
			u=read();
			for(register int i=1;i<=n;++i)
			{
				for(int j=1;j<=cnt[i];++j)
				{
					if(a[i][j]==u)
					{
						sit[i][u]=1;
					}
				}
			}
		}
		register int f=0;
		for(register int i=1;i<=n;++i)
		{
			register int c=0;
			for(register int j=1;j<=cnt[i];++j)
			{
				if(sit[i][a[i][j]]==1)
				{
					c++;
				}
			}
			if(c!=1)
			{
				printf("NO\n");
				i=n;
				f=1;
			}
		}
		if(f==0)
		{
			for(register int i=1;i<=n;++i)
			{
				register int c=0;
				for(register int j=1;j<=n;++j)
				{
					if(i==j)
						continue;
					for(register int k=1;k<=cnt[j];++k)
					{
						if(sit[j][a[j][k]]&&a[j][k]==i)
						{
							++c;
						}
					}
				}
				if(c!=1)
				{
					i=n;
					f=3;
				}
			}
			printf("YES\n");
		}
	}
	return 0;
}
2022/11/2 23:29
加载中...