結果

問題 No.205 マージして辞書順最小
ユーザー kenkooookenkoooo
提出日時 2015-05-08 23:49:20
言語 Java21
(openjdk 21)
結果
AC  
実行時間 284 ms / 5,000 ms
コード長 1,519 bytes
コンパイル時間 2,218 ms
コンパイル使用メモリ 77,780 KB
実行使用メモリ 42,480 KB
最終ジャッジ日時 2024-07-05 20:47:53
合計ジャッジ時間 6,022 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 123 ms
41,356 KB
testcase_01 AC 125 ms
40,652 KB
testcase_02 AC 160 ms
41,396 KB
testcase_03 AC 160 ms
41,588 KB
testcase_04 AC 174 ms
41,624 KB
testcase_05 AC 148 ms
41,572 KB
testcase_06 AC 121 ms
40,832 KB
testcase_07 AC 159 ms
41,256 KB
testcase_08 AC 155 ms
41,404 KB
testcase_09 AC 164 ms
41,360 KB
testcase_10 AC 247 ms
42,480 KB
testcase_11 AC 284 ms
42,188 KB
testcase_12 AC 205 ms
42,108 KB
testcase_13 AC 185 ms
42,228 KB
testcase_14 AC 126 ms
40,996 KB
testcase_15 AC 110 ms
39,752 KB
testcase_16 AC 124 ms
41,056 KB
testcase_17 AC 126 ms
41,312 KB
testcase_18 AC 121 ms
41,216 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		char[][] list = new char[N][];
		int sum = 0;
		for (int i = 0; i < list.length; i++) {
			list[i] = sc.next().toCharArray();
			sum += list[i].length;
		}
		sc.close();

		int[] curs = new int[N];
		StringBuilder sb = new StringBuilder();
		boolean[] dropped = new boolean[N];
		while (sb.length() < sum) {
			Arrays.fill(dropped, false);

			int k = 0;
			int min = -1;
			while (true) {
				char c = 'z' + 1;
				for (int i = 0; i < list.length; i++) {
					if (dropped[i]) {
						continue;
					}
					if (curs[i] + k >= list[i].length) {
						continue;
					}
					if (c >= list[i][curs[i] + k]) {
						min = i;
						c = list[i][curs[i] + k];
					}
				}
				for (int i = 0; i < list.length; i++) {
					if (dropped[i]) {
						continue;
					}
					if (curs[i] + k >= list[i].length) {
						dropped[i] = true;
						continue;
					}
					if (c < list[i][curs[i] + k]) {
						dropped[i] = true;
					}
				}
				int cnt = 0;
				for (int i = 0; i < list.length; i++) {
					if (!dropped[i]) {
						cnt++;
					}
				}
				if (cnt == 0) {
					break;
				} else if (cnt == 1) {
					for (int i = 0; i < dropped.length; i++) {
						if (!dropped[i]) {
							min = i;
							break;
						}
					}
					break;
				}
				k++;
			}

			sb.append(list[min][curs[min]]);
			curs[min]++;
		}
		System.out.println(sb.toString());

	}
}
0