Submission #2873093


Source Code Expand

using System;
using System.Collections.Generic;
using System.Linq;
using static System.Console;

namespace AtCorder
{
	public class Program
	{
		public static void Main()
		{
			int n = int.Parse(ReadLine());
			var list = ReadLine().Split().Select(x => int.Parse(x))
				.ToList();

			// 累積和を使う
			var sum = new List<double>();
			sum.Add(list[0]);
			for (int i = 1; i < n; i++)
			{
				sum.Add(sum[i - 1] + list[i]);
			}

			var ans = double.MaxValue;
			var list2 = new double[4];

			// 中央の区切りは全探索
			// 中央の区切りが移動した場合は、計算済みの左区切りと右区切りを利用する
			int left = 0;
			int right = 2;
			for (int i = 1; i < n - 2; i++)
			{
				// 左区間の区切り
				while (left < i &&
					 // sum[left + 1] - (sum[i] - sum[left + 1]) = 2 * sum[left + 1] - sum[i]
					 // sum[left] - (sum[i] - sum[left]) = sum[left] - sum[i] + sum[left] = 2 * sum[left] - sum[i]
					 // 境界を求める。一つ先が減っているなら、次へ移動する。
					 Math.Abs(2 * sum[left + 1] - sum[i]) < Math.Abs(2 * sum[left] - sum[i]))
				{
					left++;
				}

				// 右区間の区切り
				while (right < n &&
					// (sum[right] - sum[i]) - (sum[n-1] - sum[right]) = sum[right] - sum[i] - sum[n-1] - sum[right] = 2 * sum[right] - sum[i] - sum[n-1]
					Math.Abs(2 * sum[right + 1] - sum[i] - sum[n - 1]) < Math.Abs(2 * sum[right] - sum[i] - sum[n - 1]))
				{
					right++;
				}

				list2[0] = sum[left];
				list2[1] = sum[i] - sum[left];
				list2[2] = sum[right] - sum[i];
				list2[3] = sum[n - 1] - sum[right];
				ans = Math.Min(ans, list2.Max() - list2.Min());
			}

			WriteLine(ans);
		}
	}
}

Submission Info

Submission Time
Task D - Equal Cut
User ayyubid
Language C# (Mono 4.6.2.0)
Score 600
Code Size 1755 Byte
Status AC
Exec Time 180 ms
Memory 36316 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 43
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt
Case Name Status Exec Time Memory
sample_01.txt AC 24 ms 11348 KB
sample_02.txt AC 24 ms 11348 KB
sample_03.txt AC 24 ms 11348 KB
subtask_1_01.txt AC 24 ms 11348 KB
subtask_1_02.txt AC 180 ms 35036 KB
subtask_1_03.txt AC 90 ms 25824 KB
subtask_1_04.txt AC 136 ms 29148 KB
subtask_1_05.txt AC 24 ms 9300 KB
subtask_1_06.txt AC 41 ms 15072 KB
subtask_1_07.txt AC 108 ms 25824 KB
subtask_1_08.txt AC 74 ms 22368 KB
subtask_1_09.txt AC 104 ms 25440 KB
subtask_1_10.txt AC 129 ms 31452 KB
subtask_1_11.txt AC 151 ms 26972 KB
subtask_1_12.txt AC 87 ms 25568 KB
subtask_1_13.txt AC 113 ms 29920 KB
subtask_1_14.txt AC 49 ms 14560 KB
subtask_1_15.txt AC 40 ms 13152 KB
subtask_1_16.txt AC 89 ms 25304 KB
subtask_1_17.txt AC 82 ms 22368 KB
subtask_1_18.txt AC 27 ms 9440 KB
subtask_1_19.txt AC 138 ms 32732 KB
subtask_1_20.txt AC 178 ms 34860 KB
subtask_1_21.txt AC 98 ms 24672 KB
subtask_1_22.txt AC 77 ms 24288 KB
subtask_1_23.txt AC 151 ms 35856 KB
subtask_1_24.txt AC 170 ms 30428 KB
subtask_1_25.txt AC 163 ms 28380 KB
subtask_1_26.txt AC 164 ms 32220 KB
subtask_1_27.txt AC 164 ms 36316 KB
subtask_1_28.txt AC 162 ms 30428 KB
subtask_1_29.txt AC 160 ms 32220 KB
subtask_1_30.txt AC 167 ms 30172 KB
subtask_1_31.txt AC 164 ms 30428 KB
subtask_1_32.txt AC 163 ms 30428 KB
subtask_1_33.txt AC 166 ms 32220 KB
subtask_1_34.txt AC 146 ms 27484 KB
subtask_1_35.txt AC 150 ms 31580 KB
subtask_1_36.txt AC 144 ms 29532 KB
subtask_1_37.txt AC 152 ms 33628 KB