提出 #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;
}
提出情報
提出日時
2020-06-30 22:44:49+0900
問題
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
結果
セット名
テストケース
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