about summary refs log tree commit diff
path: root/others/coastline/dig.c
diff options
context:
space:
mode:
Diffstat (limited to 'others/coastline/dig.c')
-rw-r--r--others/coastline/dig.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/others/coastline/dig.c b/others/coastline/dig.c
new file mode 100644
index 0000000..8770a6b
--- /dev/null
+++ b/others/coastline/dig.c
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <string.h>
+
+int main()
+{
+	char k, n[21], digits[10] = {}, i, avail = 0, j;
+
+	scanf("%hhd %s", &k, n);
+
+	for (i = 0; i < strlen(n); i++)
+		digits[n[i] - 48] = 1;
+
+	for (i = 0; i < 10; i++)
+		if (!digits[i])
+			avail++;
+
+	if (avail == 1 && !digits[0] || !avail || avail > k) {
+		putchar(48);
+	} else {
+		if (!digits[0])
+			for (i = 1; i < 10; i++)
+				if (!digits[i]) {
+					putchar(i + 48);
+					digits[i] = 1;
+					avail--;
+					k--;
+					break;
+				}
+
+		for (i = 0; i < 10 && k; i++)
+			if (!digits[i]) {
+				for (j = 0; j <= k - avail; j++)
+					putchar(i + 48);
+				k = avail - 1;
+				digits[i] = 1;
+				break;
+			}
+
+		for (i = 0; i < 10 && k; i++)
+			if (!digits[i]) {
+				putchar(i + 48);
+				k--;
+			}
+	}
+
+	putchar(10);
+
+	return 0;
+}