题目
[https://www.luogu.com.cn/problem/P1161?contestId=62094]
题解:
#include <bits/stdc++.h>
using namespace std;
int s[2000001]={0}; //这里定义放在main里面就错了
int main()
{
int n;
double a[n+1];
int t[n+1];
for(int i=1;i<=n;i++)
scanf("%lf%d",&a[i],&t[i]);
for(int i=1;i<=n;i++){
for(int j=1;j<=t[i];j++)
{
if(s[(int)(a[i]*j)]==0)
s[(int)(a[i]*j)]=1;
else
s[(int)(a[i]*j)]=0;
}
}
for(int i=1;i<=2000001;i++)
if(s[i]==1){
printf("%d",i);
return 0;
}
}
一个小细节:数组定义在函数中时,占用的内存来自栈空间,栈空间是在进程创建时初始化的,有固定的大小,一般为几十KB,所以太大的数组会耗光栈空间。
而全局变量占用的堆空间,堆空间中的内存是按需分配,自由增长的,可以非常大,32位的系统中可以大到4GB。
此处 摘自百度回复