結果

問題 No.205 マージして辞書順最小
コンテスト
ユーザー bal4u
提出日時 2019-04-15 20:16:53
言語 C(gnu17)
(gcc 15.2.0)
コンパイル:
gcc-15 -O2 -std=gnu17 -Wno-error=implicit-function-declaration -Wno-error=implicit-int -Wno-error=incompatible-pointer-types -Wno-error=int-conversion -DONLINE_JUDGE -o a.out _filename_ -lm
実行:
./a.out
結果
AC  
実行時間 3 ms / 5,000 ms
コード長 1,109 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 199 ms
コンパイル使用メモリ 40,164 KB
最終ジャッジ日時 2026-02-22 02:59:51
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 15
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

// yukicoder: No.205 マージして辞書順最小
// 2019.4.15 bal4u

#include <stdio.h>
#include <string.h>

//// 高速入力
#if 1
#define gc() getchar_unlocked()
#define pc(c) putchar_unlocked(c)
#else
#define gc() getchar()
#define pc(c) putchar(c)
#endif
int in()    // 非負整数の入力
{
	int n = 0, c = gc();
	do n = 10 * n + (c & 0xf), c = gc(); while (c >= '0');
	return n;
}

int ins(char *s)  // 文字列の入力 スペース以下の文字で入力終了
{
	char *p = s;
	do *s = gc();
	while (*s++ > ' ');
	*--s = 0;
	return s - p;
}

void outs(char *s) { while (*s) pc(*s++); }

#define EOS '}'
int N;
char S[55][55]; int w[55], top[55];
char ans[3000]; int sz;

int main()
{
	int i, N, min;

	N = in();
	for (i = 0; i < N; i++) {
		w[i] = ins(S[i]), S[i][w[i]++] = EOS, S[i][w[i]] = 0;
	}
	while (1) {
		for (i = 0; i < N && S[i][top[i]] == EOS; i++);
		if (i >= N) break;
		min = i;
		for (; i < N; i++) if (S[i][top[i]] != EOS) {
			if (strcmp(S[min] + top[min], S[i] + top[i]) > 0) min = i;
		}
		ans[sz++] = S[min][top[min]++];
	}
	ans[sz] = 0, outs(ans), pc('\n');
	return 0;
}
0