提出 #72815885


ソースコード 拡げる

#include <stdio.h>
#include <stdlib.h>

int cmp(const void* x, const void* y) {
	int a = *(const int*)x, b = *(const int*)y;
	return (a > b) - (a < b);
}

int N, M;
int P[1024];

int scores[1024 * 1024];

int main(void) {
	int i, j;
	int num = 0;
	int ans = 0;
	if (scanf("%d%d", &N, &M) != 2) return 1;
	for (i = 0; i < N; i++) {
		if (scanf("%d", &P[i]) != 1) return 1;
	}
	for (i = 0; i < N; i++) {
		for (j = i; j < N; j++) {
			scores[num++] = P[i] + P[j];
		}
	}
	for (i = 0; i < N; i++) {
		scores[num++] = P[i];
	}
	scores[num++] = 0;
	qsort(scores, num, sizeof(*scores), cmp);
	for (i = 0; i < num && scores[i] <= M; i++) {
		int target = M - scores[i], candidate;
		int le = 0, g = num;
		while (le + 1 < g) {
			int m = le + (g - le) / 2;
			if (scores[m] <= target) le = m; else g = m;
		}
		candidate = scores[i] + scores[le];
		if (ans < candidate) ans = candidate;
	}
	printf("%d\n", ans);
	return 0;
}

/*

半分全列挙

*/

提出情報

提出日時
問題 C - ダーツ
ユーザ mikecat
言語 C23 (GCC 14.2.0)
得点 20
コード長 993 Byte
結果 AC
実行時間 77 ms
メモリ 5536 KiB

ジャッジ結果

セット名 set01 set02 set03 set04 set05 set06 set07 set08 set09 set10
得点 / 配点 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2
結果
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
セット名 テストケース
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
set06 data6
set07 data7
set08 data8
set09 data9
set10 data10
ケース名 結果 実行時間 メモリ
data1 AC 1 ms 1696 KiB
data10 AC 72 ms 5412 KiB
data2 AC 1 ms 1688 KiB
data3 AC 6 ms 2060 KiB
data4 AC 6 ms 2060 KiB
data5 AC 5 ms 1996 KiB
data6 AC 68 ms 5500 KiB
data7 AC 77 ms 5536 KiB
data8 AC 71 ms 5532 KiB
data9 AC 72 ms 5524 KiB