結果

問題 No.1630 Sorting Integers (Greater than K)
ユーザー 👑 ygussanyygussany
提出日時 2021-07-30 21:00:23
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 27 ms / 2,000 ms
コード長 1,029 bytes
コンパイル時間 1,636 ms
コンパイル使用メモリ 28,996 KB
実行使用メモリ 26,752 KB
最終ジャッジ日時 2023-10-14 01:38:52
合計ジャッジ時間 3,673 ms
ジャッジサーバーID
(参考情報)
judge13 / judge15
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,348 KB
testcase_01 AC 2 ms
4,348 KB
testcase_02 AC 2 ms
4,348 KB
testcase_03 AC 2 ms
4,348 KB
testcase_04 AC 1 ms
4,352 KB
testcase_05 AC 2 ms
4,348 KB
testcase_06 AC 1 ms
4,348 KB
testcase_07 AC 2 ms
4,348 KB
testcase_08 AC 1 ms
4,352 KB
testcase_09 AC 1 ms
4,348 KB
testcase_10 AC 2 ms
4,348 KB
testcase_11 AC 2 ms
4,348 KB
testcase_12 AC 1 ms
4,352 KB
testcase_13 AC 2 ms
4,348 KB
testcase_14 AC 2 ms
4,348 KB
testcase_15 AC 2 ms
4,352 KB
testcase_16 AC 27 ms
26,568 KB
testcase_17 AC 27 ms
26,620 KB
testcase_18 AC 24 ms
26,476 KB
testcase_19 AC 24 ms
26,480 KB
testcase_20 AC 7 ms
4,352 KB
testcase_21 AC 7 ms
4,348 KB
testcase_22 AC 7 ms
4,352 KB
testcase_23 AC 3 ms
4,348 KB
testcase_24 AC 24 ms
21,824 KB
testcase_25 AC 4 ms
4,348 KB
testcase_26 AC 23 ms
26,752 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>

int recursion(char K[], int c[], char ans[], int flag)
{
	if (K[0] == 0) return 0;
	
	int i;
	if (flag != 0) {
		for (i = 1; i <= 9; i++) if (c[i] > 0) break;
		c[i]--;
		ans[0] = '0' + i;
		return recursion(&(K[1]), c, &(ans[1]), 1);
	}
	
	if (c[K[0] - '0'] > 0) {
		c[K[0] - '0']--;
		ans[0] = K[0];
		if (recursion(&(K[1]), c, &(ans[1]), 0) == 0) return 0;
		c[K[0] - '0']++;
	}
	for (i = K[0] - '0' + 1; i <= 9; i++) if (c[i] > 0) break;
	if (i > 9) return -1;
	c[i]--;
	ans[0] = '0' + i;
	return recursion(&(K[1]), c, &(ans[1]), 1);
}

int main()
{
	int i, j, N, c[10];
	char K[1000010], ans[500005] = {};
	scanf("%d %s", &N, &(K[500005]));
	for (i = 1, c[0] = 0; i <= 9; i++) scanf("%d", &(c[i]));
	
	for (i = 0; i < 500005; i++) K[i] = '0';
	for (; K[i] != 0; i++);
	for (j = i - 1; K[j] == '9'; K[j--] = '0');
	K[j]++;
	for (j = i - N - 1; j >= 0; j--) if (K[j] != '0') break;
	if (j < 0 && recursion(&(K[i-N]), c, ans, 0) == 0) printf("%s\n", ans);
	else printf("-1\n");
	fflush(stdout);
	return 0;
}
0