静态数组比动态数组慢这么多???

P3740 [HAOI2014] 贴海报

缘起□缘灭 @ 2019-12-05 21:17:53

同样是暴力程序,开静态数组要t一个点,而动态可以过,而且快了220ms这么大。。。 这是为什么?

测评记录1

测评记录2


by qwqqwq_qwqqwq @ 2019-12-05 21:19:16

看不到代码...


by 1saunoya @ 2019-12-05 21:51:56

您好,指针显然是比数组快的 但是在64位下空间是数组的两倍…


by qwqqwq_qwqqwq @ 2019-12-05 21:55:40

@Isaunoya 我看不到题主的代码,但我猜题主在栈上开了一个巨大的数组,这种操作很慢的...


by qwqqwq_qwqqwq @ 2019-12-05 21:55:56

@Isaunoya 和是否使用指针并没什么关系


by 缘起□缘灭 @ 2019-12-06 20:35:54

这是AC代码

#include<bits/stdc++.h>
using namespace std;
int read(){
    int res=0;char x=getchar();
    while(!isdigit(x))x=getchar();
    while(isdigit(x))res=(res<<3)+(res<<1)+(x^48),x=getchar();
    return res;
}
int main(){
    int n=read(),m=read(),ma=0,mi=10000001;
    int a[m+1],b[m+1],f[m+1];
    for(int i=1;i<=m;++i)
        a[i]=read(),b[i]=read(),f[i]=0,mi=min(mi,a[i]),ma=max(ma,b[i]);
    for(int i=mi;i<=ma;++i)
        for(int j=m;j>=1;--j)
            if(i<=b[j]&&i>=a[j])
                {f[j]=1;break;}
    int ans=0;
    for(int i=1;i<=m;i++)
        ans+=f[i];
    printf("%d",ans);
}

这是90分的

#include<bits/stdc++.h>
using namespace std;
int read(){
    int res=0;char x=getchar();
    while(!isdigit(x))x=getchar();
    while(isdigit(x))res=(res<<3)+(res<<1)+(x^48),x=getchar();
    return res;
}
int main(){
    int n=read(),m=read(),ma=0,mi=10000001;
    int a[1005],b[1005],f[1005];
    for(int i=1;i<=m;++i)
        a[i]=read(),b[i]=read(),f[i]=0,mi=min(mi,a[i]),ma=max(ma,b[i]);
    for(int i=mi;i<=ma;++i)
        for(int j=m;j>=1;--j)
            if(i<=b[j]&&i>=a[j])
                {f[j]=1;break;}
    int ans=0;
    for(int i=1;i<=m;i++)
        ans+=f[i];
    printf("%d",ans);
}

|