Submission #2837055


Source Code Expand

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;

public class Main {

	static PrintWriter out;
	static InputReader ir;
	static boolean debug = false;

	static void solve() {
		char[] a = ir.next().toCharArray();
		int n = a.length;
		int[][][] dp = new int[n + 1][26][2];
		for (int i = 0; i < 26; i++)
			dp[n][i] = new int[] { i, 1 };
		for (int i = n - 1; i >= 0; i--) {
			for (int j = 0; j < 26; j++)
				for (int k = 0; k < 2; k++)
					dp[i][j][k] = dp[i + 1][j][k];
			int cur = a[i] - 'a';
			int mi = 2 * n;
			for (int j = 0; j < 26; j++)
				mi = Math.min(mi, dp[i + 1][j][1]);
			for (int j = 0; j < 26; j++) {
				if (dp[i + 1][j][1] == mi) {
					dp[i][cur][0] = j;
					dp[i][cur][1] = dp[i + 1][j][1] + 1;
					break;
				}
			}
		}
		int mi = 2 * n, cur = -1;
		;
		for (int i = 0; i < 26; i++)
			mi = Math.min(mi, dp[0][i][1]);
		for (int i = 0; i < 26; i++)
			if (dp[0][i][1] == mi) {
				cur = i;
				break;
			}
		StringBuilder ret = new StringBuilder(Character.toString((char) ('a' + cur)));
		for (int i = 0; i < n; i++) {
			if (dp[i][cur][0] == dp[i + 1][cur][0] && dp[i][cur][1] == dp[i + 1][cur][1])
				continue;
			ret.append(Character.toString((char) ('a' + dp[i][cur][0])));
			cur = dp[i][cur][0];
		}
		out.println(ret);
	}

	public static void main(String[] args) {
		ir = new InputReader(System.in);
		out = new PrintWriter(System.out);
		solve();
		out.flush();
	}

	static class InputReader {

		private InputStream in;
		private byte[] buffer = new byte[1024];
		private int curbuf;
		private int lenbuf;

		public InputReader(InputStream in) {
			this.in = in;
			this.curbuf = this.lenbuf = 0;
		}

		public boolean hasNextByte() {
			if (curbuf >= lenbuf) {
				curbuf = 0;
				try {
					lenbuf = in.read(buffer);
				} catch (IOException e) {
					throw new InputMismatchException();
				}
				if (lenbuf <= 0)
					return false;
			}
			return true;
		}

		private int readByte() {
			if (hasNextByte())
				return buffer[curbuf++];
			else
				return -1;
		}

		private boolean isSpaceChar(int c) {
			return !(c >= 33 && c <= 126);
		}

		private void skip() {
			while (hasNextByte() && isSpaceChar(buffer[curbuf]))
				curbuf++;
		}

		public boolean hasNext() {
			skip();
			return hasNextByte();
		}

		public String next() {
			if (!hasNext())
				throw new NoSuchElementException();
			StringBuilder sb = new StringBuilder();
			int b = readByte();
			while (!isSpaceChar(b)) {
				sb.appendCodePoint(b);
				b = readByte();
			}
			return sb.toString();
		}

		public int nextInt() {
			if (!hasNext())
				throw new NoSuchElementException();
			int c = readByte();
			while (isSpaceChar(c))
				c = readByte();
			boolean minus = false;
			if (c == '-') {
				minus = true;
				c = readByte();
			}
			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res = res * 10 + c - '0';
				c = readByte();
			} while (!isSpaceChar(c));
			return (minus) ? -res : res;
		}

		public long nextLong() {
			if (!hasNext())
				throw new NoSuchElementException();
			int c = readByte();
			while (isSpaceChar(c))
				c = readByte();
			boolean minus = false;
			if (c == '-') {
				minus = true;
				c = readByte();
			}
			long res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res = res * 10 + c - '0';
				c = readByte();
			} while (!isSpaceChar(c));
			return (minus) ? -res : res;
		}

		public double nextDouble() {
			return Double.parseDouble(next());
		}

		public int[] nextIntArray(int n) {
			int[] a = new int[n];
			for (int i = 0; i < n; i++)
				a[i] = nextInt();
			return a;
		}

		public long[] nextLongArray(int n) {
			long[] a = new long[n];
			for (int i = 0; i < n; i++)
				a[i] = nextLong();
			return a;
		}

		public char[][] nextCharMap(int n, int m) {
			char[][] map = new char[n][m];
			for (int i = 0; i < n; i++)
				map[i] = next().toCharArray();
			return map;
		}
	}

	static void tr(Object... o) {
		if (debug)
			out.println(Arrays.deepToString(o));
	}
}

Submission Info

Submission Time
Task E - Don't Be a Subsequence
User holeguma
Language Java8 (OpenJDK 1.8.0)
Score 600
Code Size 4360 Byte
Status AC
Exec Time 1727 ms
Memory 232576 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 36
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, 1.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 2.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 3.txt, 30.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
1.txt AC 70 ms 18260 KB
10.txt AC 1687 ms 228988 KB
11.txt AC 1679 ms 227908 KB
12.txt AC 1698 ms 229332 KB
13.txt AC 1670 ms 226344 KB
14.txt AC 1677 ms 232232 KB
15.txt AC 1680 ms 229884 KB
16.txt AC 1694 ms 227304 KB
17.txt AC 1726 ms 227396 KB
18.txt AC 1706 ms 230356 KB
19.txt AC 1706 ms 228916 KB
2.txt AC 76 ms 21076 KB
20.txt AC 1704 ms 230316 KB
21.txt AC 1692 ms 229692 KB
22.txt AC 1680 ms 224880 KB
23.txt AC 1715 ms 232576 KB
24.txt AC 1670 ms 229416 KB
25.txt AC 1685 ms 227532 KB
26.txt AC 1694 ms 228012 KB
27.txt AC 1689 ms 227212 KB
28.txt AC 1693 ms 227344 KB
29.txt AC 1704 ms 230056 KB
3.txt AC 107 ms 26532 KB
30.txt AC 1727 ms 230584 KB
4.txt AC 108 ms 28628 KB
5.txt AC 823 ms 142316 KB
6.txt AC 833 ms 138984 KB
7.txt AC 1688 ms 225252 KB
8.txt AC 1684 ms 230068 KB
9.txt AC 1711 ms 230244 KB
sample1.txt AC 68 ms 18900 KB
sample2.txt AC 69 ms 20692 KB
sample3.txt AC 70 ms 21076 KB