Submission #2837046


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;
			}
		String ret = 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 += 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 0
Code Size 4329 Byte
Status MLE
Exec Time 1822 ms
Memory 310820 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 3
AC × 29
MLE × 7
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 69 ms 19284 KB
10.txt AC 1704 ms 228168 KB
11.txt AC 1682 ms 224736 KB
12.txt AC 1672 ms 230788 KB
13.txt AC 1715 ms 228684 KB
14.txt AC 1711 ms 231528 KB
15.txt AC 1694 ms 227292 KB
16.txt AC 1711 ms 227504 KB
17.txt MLE 1762 ms 247692 KB
18.txt MLE 1728 ms 250040 KB
19.txt MLE 1769 ms 269964 KB
2.txt AC 78 ms 23636 KB
20.txt MLE 1790 ms 284392 KB
21.txt MLE 1796 ms 310356 KB
22.txt MLE 1816 ms 310820 KB
23.txt MLE 1822 ms 309896 KB
24.txt AC 1706 ms 228540 KB
25.txt AC 1703 ms 226760 KB
26.txt AC 1688 ms 227908 KB
27.txt AC 1691 ms 229540 KB
28.txt AC 1673 ms 226940 KB
29.txt AC 1682 ms 231068 KB
3.txt AC 108 ms 27332 KB
30.txt AC 1705 ms 227896 KB
4.txt AC 108 ms 29404 KB
5.txt AC 823 ms 138996 KB
6.txt AC 844 ms 138180 KB
7.txt AC 1722 ms 228944 KB
8.txt AC 1702 ms 228616 KB
9.txt AC 1690 ms 227532 KB
sample1.txt AC 68 ms 21204 KB
sample2.txt AC 68 ms 19156 KB
sample3.txt AC 69 ms 19156 KB