https://www.luogu.com.cn/problem/P2926
我写的此题ac代码:
#include<stdio.h>
int main()
{
int n,re[1000005]={0};\\主要问题出在这里,如果开到当前1000005 devc++不能正常运行,但题目能过,报错是超出有效地址。
scanf("%d",&n);
int base[n],max=0;
for(int i=0;i<n;i++)
{
scanf("%d",&base[i]);
re[base[i]]++;
if(base[i]>max)
max=base[i];
}
int value[max+1]={0};
for(int i=1;i<=max;i++)
{
if(re[i]==0)
continue;
int size=max/i;
for(int j=0;j<size;j++)
{
value[i*(j+1)]+=re[i];
}
}
for(int i=0;i<n;i++)
{
printf("%d\n",value[base[i]]-1);
}
}
但如果将数组大小改为100005本地能运行,但数组尺寸太小线上几个点会RE,所以希望有大佬能帮忙解释下这个一维数组开的大小是根据什么来决定的。