Aランクレベルアップメニューの「区間和の計算」でLINQを使って配列に格納すると、ランタイムエラーになってしまう。原因はLINQが重いから??
Sample.csの書き方の場合、「区間和の計算」テスト3で100000もの数値を配列に入れる際にランタイムエラーになる。
Sample2.csの場合は無事通過。なんでかわかる方はコメントお願いします。
Sample.cs
using System;
using System.Linq;
using System.Collections.Generic;
class Practice
{
static void Main()
{
int count = int.Parse(Console.ReadLine());
// こいつが重い?
int[] text = Console.ReadLine().Split().Select(_ => int.Parse(_)).ToArray();
int c = int.Parse(Console.ReadLine());
int[] sn = new int[count];
for (int i = 0; i < count; i++) {
if (i == 0)
sn[i] = text[0];
else
sn[i] = sn[i - 1] + text[i];
}
for (int i = 0; i < c; i++) {
int[] line = Console.ReadLine().Split().Select(_ => int.Parse(_)).ToArray();
int min = line[0];
int max = line[1];
if (min == 0)
Console.WriteLine(sn[max]);
else
Console.WriteLine(sn[max] - sn[min - 1]);
}
}
}
Sample2.cs
using System;
using System.Linq;
using System.Collections.Generic;
class Practice
{
static void Main()
{
int count = int.Parse(Console.ReadLine());
// 一度string配列で受け取って使う時にint型にキャスト
string[] text = Console.ReadLine().Split(' ');
int c = int.Parse(Console.ReadLine());
int[] sn = new int[count];
for (int i = 0; i < count; i++) {
if (i == 0)
sn[i] = int.Parse(text[0]);
else
sn[i] = sn[i - 1] + int.Parse(text[i]);
}
for (int i = 0; i < c; i++) {
int[] line = Console.ReadLine().Split().Select(_ => int.Parse(_)).ToArray();
int min = line[0];
int max = line[1];
if (min == 0)
Console.WriteLine(sn[max]);
else
Console.WriteLine(sn[max] - sn[min - 1]);
}
}
}