求大佬看一下,为什么数组开小了就60分

P1187 3D模型

谁来解释一下
by ChinaGIAO @ 2019-04-03 08:59:13


@[ChinaGIAO](/space/show?uid=186255) 假设数据是$1000*1000$的 那么你的第一个程序就会访问第1001格,但你的第一个程序只开了1001的数组大小(应为1002)
by Smile_Cindy @ 2019-04-03 09:02:07


@[Alpha](/space/show?uid=87058) O(∩_∩)O谢谢大佬,但我还是有点不懂
by ChinaGIAO @ 2019-04-03 09:06:03


@[ChinaGIAO](/space/show?uid=186255) 就是数组$A[1001]$的最大下标只有1000的意思
by Smile_Cindy @ 2019-04-03 09:13:38


@[Alpha](/space/show?uid=87058) 我知道了,谢谢
by ChinaGIAO @ 2019-04-03 09:26:32


# 自己打的!!!!! #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int map[1050][1050];//开个数组 char c; int n,m; int ans=0;//这就是面积 int main() { memset(map,0,sizeof(map)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>c;//输入数字字符 map[i][j]=c-'0';//存数 if(c!='0') ans+=2;//计算上表面积与下表面积 } for(int i=1;i<=n;i++)//进行计算 for(int j=1;j<=m;j++) { if(map[i-1][j]<map[i][j]) ans+=map[i][j]-map[i-1][j]; if(map[i+1][j]<map[i][j]) ans+=map[i][j]-map[i+1][j]; if(map[i][j+1]<map[i][j]) ans+=map[i][j]-map[i][j+1]; if(map[i][j-1]<map[i][j]) ans+=map[i][j]-map[i][j-1]; } printf("%d",ans);//输出答案 }
by Atmizz @ 2019-04-03 10:22:11


# 自己打的 ```cpp include<iostream> include<cstdio> include<cstring> include<cmath> using namespace std; int map[1050][1050];//开个数组 char c; int n,m; int ans=0;//这就是面积 int main() { memset(map,0,sizeof(map)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>c;//输入数字字符 map[i][j]=c-'0';//存数 if(c!='0') ans+=2;//计算上表面积与下表面积 } for(int i=1;i<=n;i++)//进行计算 for(int j=1;j<=m;j++) { if(map[i-1][j]<map[i][j]) ans+=map[i][j]-map[i-1][j]; if(map[i+1][j]<map[i][j]) ans+=map[i][j]-map[i+1][j]; if(map[i][j+1]<map[i][j]) ans+=map[i][j]-map[i][j+1]; if(map[i][j-1]<map[i][j]) ans+=map[i][j]-map[i][j-1]; } printf("%d",ans);//输出答案 } ```
by Atmizz @ 2019-04-04 18:05:52


其实就是你数组开大一点儿就好了,比如此题n,m<1000,那你就开一个1100不就好了吗,重点就是:不能开小,只能开大,而且越大越好(前提是不会爆)
by 南楼故语 @ 2019-07-26 17:28:58


|