結果
| 問題 | No.3626 Not a Prefix |
| コンテスト | |
| ユーザー |
tnakao0123
|
| 提出日時 | 2026-08-18 11:58:50 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,756 bytes |
| 記録 | |
| コンパイル時間 | 231 ms |
| コンパイル使用メモリ | 54,604 KB |
| 実行使用メモリ | 64,384 KB |
| 最終ジャッジ日時 | 2026-08-18 11:58:55 |
| 合計ジャッジ時間 | 4,840 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 28 WA * 17 |
ソースコード
/* -*- coding: utf-8 -*-
*
* 3626.cc: No.3626 Not a Prefix - yukicoder
*/
#include<cstdio>
#include<algorithm>
using namespace std;
/* constant */
const int MAX_N = 200000;
const int MAX_GN = 500000;
const int INF = 1 << 30;
/* typedef */
struct Node {
int p, c, f, nbrs[26];
Node(): p(), c(), f(), nbrs() {}
void init(int _p = -1) {
p = _p, c = f = 0;
fill(nbrs, nbrs + 26, -1);
}
};
/* global variables */
char s[MAX_GN + 4];
Node es[MAX_GN];
int cis[MAX_GN], mincs[MAX_GN];
/* subroutines */
int allocnode(int &gn, int p = -1) {
es[gn].init(p);
return gn++;
}
void trie_add(char s[], int &gn) {
int u = 0;
for (int i = 0; s[i]; i++) {
int ci = s[i] - 'a';
int &v = es[u].nbrs[ci];
if (v < 0) v = allocnode(gn, u);
es[v].c++;
u = v;
}
es[u].f++;
}
/* main */
int main() {
int n, m;
scanf("%d%d", &n, &m);
int gn = 0;
allocnode(gn);
for (int i = 0; i < n; i++) {
scanf("%s", s);
trie_add(s, gn);
}
fill(mincs, mincs + gn, INF);
for (int u = 0; u >= 0;) {
auto &nbru = es[u].nbrs;
int up = es[u].p;
if (cis[u] < 26) {
int v = nbru[cis[u]++];
if (v >= 0) u = v;
}
else {
mincs[u] = min(mincs[u], es[u].c);
if (up >= 0) mincs[up] = min(mincs[up], mincs[u]);
u = up;
}
}
int l = 0, d = n - m;
for (int u = 0;;) {
auto &nbru = es[u].nbrs;
bool cont = false, f = false;
for (int i = 0; i < 26; i++) {
int v = nbru[i];
if (v < 0 || (es[v].f <= d && mincs[v] <= d)) {
s[l++] = 'a' + i;
cont = true;
if (es[v].c <= d) f = true;
u = v;
break;
}
}
if (! cont || f) break;
}
s[l] = '\0';
if (l > 0) printf("Yes\n%s\n", s);
else puts("No");
return 0;
}
tnakao0123