zoukankan      html  css  js  c++  java
  • 关于memset函数导致的MLE

    写了一个简单的差分数组的题目,在写的过程中对全局数组变量使用memset进行了初始化,
    结果不停的MLE。原题传送门

    我的代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    
    const int maxn = 10000 + 100;
    
    int aim[maxn];
    int n,i,h,r;
    int vis[maxn][maxn];
    int b[maxn];
    
    int main(){
        //freopen("in.txt","r",stdin);
        cin>>n>>i>>h>>r;
        for(int i=0;i<=n+1;i++){
            b[i] = h;
        }
          //memset(aim,0,sizeof(aim));
          //memset(vis,0,sizeof(vis));
    //这里原本就是有两个memset函数的,但是如果不去掉的话就会一直MLE
        while(r--){
            int a,y;
            scanf("%d%d",&a,&y);
            if(a>y)swap(a,y);
            if(vis[a][y])continue;
            vis[a][y]=1;
            aim[a+1]--;
            aim[y]++;
        }
        //
        for(int i=1;i<=n;i++){
    		b[i]=b[i-1]+aim[i];
    		printf("%d
    ",b[i]);
    	}
        /*aim[0] = 0;
        for(int i=1;i<=n;i++){
            aim[i] = aim[i-1] + aim[i];
            if(i)cout<< aim[i] + h <<endl;
        }*/
        return 0;
    }
    

    然后我在网络上搜了相关问题,有一个这样的解答

    百度了一下才发现:
    
    对于全局变量的处理,如果不初始化,那么它一开始占的内存会比初始化了的全局变量小非常多。
    
    我这里一开始就对一个比较大的数组用memset进行了初始化,导致了全局变量占用了很多的内存。
    
    其实只需要for循环遍历已用的空间即可。(又涨知识了..)
    

    OK

  • 相关阅读:
    linux压缩与解压
    simple 单例
    模板字符串
    变量的解构赋值
    let和const关键字
    React的基本认识
    Docker安装Nginx
    jenkins创建工程
    Jenkins系统初始化配置
    在CentOS上使用Docker镜像安装Jenkins
  • 原文地址:https://www.cnblogs.com/savennist/p/13771231.html
Copyright © 2011-2022 走看看