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;
}