結果

問題 No.3513 Greedy Yokan Party
コンテスト
ユーザー pengin_2000
提出日時 2026-04-24 22:19:02
言語 C
(gcc 15.2.0)
コンパイル:
gcc-15 -O2 -DONLINE_JUDGE -o a.out _filename_ -lm
実行:
./a.out
結果
AC  
実行時間 183 ms / 2,000 ms
コード長 988 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 340 ms
コンパイル使用メモリ 41,188 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-04-24 22:19:13
合計ジャッジ時間 8,619 ms
ジャッジサーバーID
(参考情報)
judge4_1 / judge2_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<stdio.h>
int a[200005];
int left[200005], right[200005];
int main()
{
	int n, l, k;
	scanf("%d %d %d", &n, &l, &k);
	int i, j;
	for (i = 0; i < n; i++)
		scanf("%d", &a[i + 1]);
	a[0] = 0;
	a[++n] = l;
	int min, mid, max;
	min = 0;
	max = l + 1;
	while (max - min > 1)
	{
		mid = (max + min) / 2;
		left[0] = 1e9;
		for (j = 0, i = 1; i <= n; i++)
		{
			for (; a[i] - a[j + 1] >= mid; j++);
			if (a[i] - a[j] < mid)
				left[i] = 1e9;
			else if (left[i - 1] > i - j - 1)
				left[i] = i - j - 1;
			else
				left[i] = left[i - 1];
		}
		right[n] = 1e9;
		for (i = n - 1, j = n; i >= 0; i--)
		{
			for (; a[j - 1] - a[i] >= mid; j--);
			if (a[j] - a[i] < mid)
				right[i] = 1e9;
			else if (right[i + 1] > j - i - 1)
				right[i] = j - i - 1;
			else
				right[i] = right[i + 1];
		}
		j = 1e9;
		for (i = 0; i <= n; i++)
			if (j > left[i] + right[i])
				j = left[i] + right[i];
		if (j + k > n - 1)
			max = mid;
		else
			min = mid;
	}
	printf("%d\n", min);
	return 0;
}
0