提出 #14868366


ソースコード 拡げる

#include <stdio.h>

int sum[33], binom[33][33], rem[33][100003] = {};

void merge_sort(int x[], int n)
{
	static int y[33] = {};
	if (n <= 1) return;
	merge_sort(&(x[0]), n/2);
	merge_sort(&(x[n/2]), (n+1)/2);
	
	int i, p, q;
	for (i = 0, p = 0, q = n/2; i < n; i++) {
		if (p >= n/2) y[i] = x[q++];
		else if (q >= n) y[i] = x[p++];
		else y[i] = (x[p] < x[q])? x[p++]: x[q++];
	}
	for (i = 0; i < n; i++) x[i] = y[i];
}

int recursion(int w[], int n, int X)
{
	if (X == 0 || sum[n] == X) return 1;
	else if (n == 0 || sum[n] < X || w[0] > X || rem[n][X%100003] == 0) return 0;
	else if (w[n-1] > X) return recursion(w, n - 1, X);
	else if (w[n-1] != w[n-2]) return recursion(w, n - 1, X - w[n-1]) + recursion(w, n - 1, X);
	
	int i, j, ans = 0;
	for (i = 2; i <= n && w[n-i] == w[n-1]; i++);
	for (j = 0; j < i; j++) ans += recursion(w, n - i + 1, X - w[n-1] * j) * binom[i-1][j];
	return ans;
}

int main()
{
	int i, j, N, X, w[33];
	scanf("%d %d", &N, &X);
	for (i = 0; i < N; i++) scanf("%d", &(w[i]));
	merge_sort(w, N);
	for (i = 0, sum[0] = 0; i < N; i++) sum[i+1] = sum[i] + w[i];
	for (i = 0; i <= N; i++) {
		binom[i][0] = 1;
		binom[i][i] = 1;
		for (j = 1; j < i; j++) binom[i][j] = binom[i-1][j-1] + binom[i-1][j];
	}
	for (i = 0, rem[0][0] = 1; i < N; i++) {
		for (j = 0; j < 100003; j++) {
			rem[i+1][j] |= rem[i][j];
			rem[i+1][(j+w[i])%100003] |= rem[i][j];
		}
	}
	printf("%d\n", recursion(w, N, X));
	fflush(stdout);
	return 0;
}

提出情報

提出日時
問題 C - 無駄なものが嫌いな人
ユーザ ygussany
言語 C (GCC 9.2.1)
得点 100
コード長 1506 Byte
結果 AC
実行時間 469 ms
メモリ 14168 KiB

コンパイルエラー

./Main.c: In function ‘main’:
./Main.c:37:2: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
   37 |  scanf("%d %d", &N, &X);
      |  ^~~~~~~~~~~~~~~~~~~~~~
./Main.c:38:26: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
   38 |  for (i = 0; i < N; i++) scanf("%d", &(w[i]));
      |                          ^~~~~~~~~~~~~~~~~~~~

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 28
セット名 テストケース
All max_1.txt, max_2.txt, max_3.txt, max_4.txt, pair_1.txt, pair_2.txt, power2_1.txt, power2_2.txt, power2_3.txt, power2_4.txt, power2_5.txt, random_1.txt, random_2.txt, random_3.txt, random_4.txt, random_5.txt, random_6.txt, random_7.txt, random_8.txt, random_9.txt, sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, small_1.txt, small_2.txt, small_3.txt, small_4.txt
ケース名 結果 実行時間 メモリ
max_1.txt AC 21 ms 14152 KiB
max_2.txt AC 278 ms 14100 KiB
max_3.txt AC 19 ms 14156 KiB
max_4.txt AC 469 ms 14160 KiB
pair_1.txt AC 30 ms 14096 KiB
pair_2.txt AC 20 ms 14164 KiB
power2_1.txt AC 20 ms 14152 KiB
power2_2.txt AC 21 ms 14160 KiB
power2_3.txt AC 19 ms 14168 KiB
power2_4.txt AC 21 ms 14100 KiB
power2_5.txt AC 21 ms 11420 KiB
random_1.txt AC 24 ms 13780 KiB
random_2.txt AC 21 ms 13720 KiB
random_3.txt AC 21 ms 14156 KiB
random_4.txt AC 29 ms 14100 KiB
random_5.txt AC 37 ms 14160 KiB
random_6.txt AC 51 ms 13716 KiB
random_7.txt AC 36 ms 14164 KiB
random_8.txt AC 27 ms 14160 KiB
random_9.txt AC 22 ms 13780 KiB
sample_1.txt AC 10 ms 3560 KiB
sample_2.txt AC 10 ms 4728 KiB
sample_3.txt AC 18 ms 9484 KiB
sample_4.txt AC 14 ms 7924 KiB
small_1.txt AC 6 ms 2056 KiB
small_2.txt AC 2 ms 2064 KiB
small_3.txt AC 6 ms 2388 KiB
small_4.txt AC 7 ms 2844 KiB