結果

問題 No.1630 Sorting Integers (Greater than K)
ユーザー 👑 ygussany
提出日時 2021-07-30 20:54:42
言語 C
(gcc 13.3.0)
結果
WA  
実行時間 -
コード長 957 bytes
コンパイル時間 163 ms
コンパイル使用メモリ 29,952 KB
実行使用メモリ 26,624 KB
最終ジャッジ日時 2024-09-15 22:46:04
合計ジャッジ時間 1,453 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 20 WA * 2
権限があれば一括ダウンロードができます

ソースコード

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[1000003], ans[500003];
	scanf("%d %s", &N, &(K[500001]));
	for (i = 1, c[0] = 0; i <= 9; i++) scanf("%d", &(c[i]));
	
	for (i = 0; i < 500001; i++) K[i] = '0';
	for (; K[i] != 0; i++);
	for (j = i - 1; K[j] == '9'; K[j--] = '0');
	K[j]++;
	if (recursion(&(K[i-N]), c, ans, 0) == 0) printf("%s\n", ans);
	else printf("-1\n");
	fflush(stdout);
	return 0;
}
0