首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

如何开较大数组

2013-06-25 
怎么开较大数组?#includeiostream#includestdio.husing namespace stdstruct jishu{int sint a[5000

怎么开较大数组?
#include<iostream>
#include<stdio.h>
using namespace std;
struct jishu{
int s;
int a[50000];
};

int main()
{
    int i,k,m,n,t,b[50000],v,u,ans;

    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&n,&m,&k);
     jishu *p=new jishu[m];
        for(i=0;i<=m;i++)
        {
            p[i].s=0;
        }
        for(i=0;i<n;i++)
        {
            scanf("%d",&b[i]);
                p[b[i]].a[ p[b[i]].s]=i;

                 p[b[i]].s++;
        }
        ans=0;
      for(i=1;i<=m;i++)
       {
           u=0;
           v=p[i].s-1;
           while(p[i].a[v]-p[i].a[u]+1-p[i].s>k)
           {
               if(p[i].a[u+1]-p[i].a[u]>p[i].a[v]-p[i].a[v-1])
               u++;
               else
               v--;
               p[i].s--;
           }
           if(p[i].s>ans)
           ans=p[i].s;
       }
            printf("%d\n",ans);
            delete []p;

    }
    return 0;
}


为什么一直是runtime error??? 命名空间 iostream
[解决办法]
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。

栈区<数据区<堆区<文件大小<磁盘大小
[解决办法]

#include<iostream>
#include<stdio.h>
using namespace std;
struct jishu{
int s;
int a[50000];
};



int main()
{
    int i,k,m,n,t,b[50000],v,u,ans;

    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&n,&m,&k);
     jishu *p=new jishu[m];
        for(i=0;i<=m;i++)//-------------- p指针超界
        {
            p[i].s=0;
        }
        for(i=0;i<n;i++) //------- n <=m <=50000
        {
            scanf("%d",&b[i]);
                p[b[i]].a[ p[b[i]].s]=i;

                 p[b[i]].s++;
        }
        ans=0;
      for(i=1;i<=m;i++)  //--------------- p指针超界
       {
           u=0;
           v=p[i].s-1;
           while(p[i].a[v]-p[i].a[u]+1-p[i].s>k) //----------- p[i].a[v],p[i].a[u]可能无值
           {
               if(p[i].a[u+1]-p[i].a[u]>p[i].a[v]-p[i].a[v-1])//----- v-1有可能<0
               u++;
               else
               v--; //----------- v有可能<1
               p[i].s--;
           }
           if(p[i].s>ans)
           ans=p[i].s;
       }
            printf("%d\n",ans);
            delete []p;

    }
    return 0;
}

热点排行
Bad Request.