# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
639885 | 2022-09-12T15:44:50 Z | PoonYaPat | Type Printer (IOI08_printer) | C++14 | 128 ms | 99588 KB |
#include <bits/stdc++.h> using namespace std; int n,mmax; bool havemax=false; const int sz=26; vector<char> ans; struct Trienode { struct Trienode *children[26]; int level; char x; bool Endword,longest; }; struct Trienode *getnode(char x, int l) { struct Trienode *pnode = new Trienode; for (int i=0; i<sz; ++i) pnode->children[i]=NULL; pnode->level=l; pnode->x=x; pnode->Endword=false; pnode->longest=false; return pnode; }; void insert(struct Trienode *root, string key) { struct Trienode *pnode = root; for (int i=0; i<key.size(); ++i) { int idx=key[i]-'a'; if (!pnode->children[idx]) pnode->children[idx]=getnode(key[i],pnode->level+1); pnode=pnode->children[idx]; } pnode->Endword=true; } bool fm(struct Trienode *root) { //if it has the longest path, it will return true; if (root->level==mmax && !havemax) { havemax=true; root->longest=true; return true; } for (int i=0; i<sz; ++i) if (root->children[i] && fm(root->children[i])) { root->longest=true; return true; } return false; } void dfs(struct Trienode *root) { if (root->x != '-') ans.push_back(root->x); if (root->Endword) ans.push_back('P'); struct Trienode *pnode; bool haveP=false; for (int i=0; i<sz; ++i) if (root->children[i]) { if (!root->children[i]->longest) dfs(root->children[i]); else pnode=root->children[i], haveP=true; } if (haveP) dfs(pnode); if (!root->longest) ans.push_back('-'); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; struct Trienode *root = getnode('-',0); while (n--) { string s; cin>>s; mmax=max(mmax,(int)(s.size())); insert(root,s); } fm(root); dfs(root); cout<<ans.size()<<"\n"; for (auto s : ans) cout<<s<<"\n"; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 340 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 324 KB | Output is correct |
2 | Correct | 1 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 316 KB | Output is correct |
2 | Correct | 1 ms | 320 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 340 KB | Output is correct |
2 | Correct | 1 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 340 KB | Output is correct |
2 | Correct | 2 ms | 1108 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 1748 KB | Output is correct |
2 | Correct | 4 ms | 2272 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 5972 KB | Output is correct |
2 | Correct | 16 ms | 12548 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 22 ms | 14760 KB | Output is correct |
2 | Correct | 7 ms | 3412 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 55 ms | 36616 KB | Output is correct |
2 | Correct | 110 ms | 83752 KB | Output is correct |
3 | Correct | 64 ms | 43140 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 42 ms | 28620 KB | Output is correct |
2 | Correct | 128 ms | 99588 KB | Output is correct |
3 | Correct | 74 ms | 49112 KB | Output is correct |
4 | Correct | 125 ms | 94008 KB | Output is correct |