hackerearth に関する質問を読みました。入力として N を使用して、スパイラル行列 N N の両方の対角線の合計を出力するよう求められます。a[0][0]=N N で中心が 1 のスパイラル行列、すなわち
16 15 14 13
5 4 3 12
6 1 2 11
7 8 9 10
このためのコードを実装しましたが、入力 N >= 10^5 の場合にセグメンテーション エラーまたは実行時エラーが発生します
何が起こっているのか理解できません
#include <stdio.h>
int main(void) {
long long int n,test;
scanf("%lld",&test);
while(test--){
scanf("%lld",&n);
long long int p=n*n;
long long int r1=0,r2=n-1,c1=0,c2=n-1,i,j;
long long int a[n][n];
while(p>=1)
{
for(i=c1;i<=c2;i++)
{
a[r1][i]=p--;
}
for(j=r1+1;j<=r2;j++)
{
a[j][c2]=p--;
}
for(i=c2-1;i>=c1;i--)
{
a[r2][i]=p--;
}
for(j=r2-1;j>=r1+1;j--)
{
a[j][c1]=p--;
}
c1++;
c2--;
r1++;
r2--;
}
long long int sum=0;
for ( i = 0, j =0; i< n && j < n; i++, j++) {
sum = sum + a[i][j];
}
for ( i=0,j=n-1 ; i<n && j>=0 ; i++, j--) {
sum= sum + a[i][j];
}
printf("%lld\n",sum%1000000009);
}
return 0;
}