제출 #1280321

#제출 시각아이디문제언어결과실행 시간메모리
1280321khoavn2008Type Printer (IOI08_printer)C++20
20 / 100
56 ms57592 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ld double #define FOR(i,l,r) for(ll i = (l), _r = (r); i <= _r; i++) #define FORNG(i,r,l) for(ll i = (r), _l = (l); i >= _l; i--) #define REP(i,r) for(ll i = 0, _r = (r); i < _r; i++) #define endl '\n' #define fi first #define se second #define pb push_back #define size(v) ((ll)(v).size()) #define all(v) (v).begin(),(v).end() #define MASK(x) (1LL << (x)) #define BIT(x,i) (((x) >> (i)) & 1) const ll MOD = 1e9 + 7, N = 7e5 + 10, INF = 1e18, LOG = 21; ll cntUsedNode = 1; ll root = 0; ll nxt[N][26],sz[N]; bool isEnd[N]; void addstr(string &s){ ll p = root; for(char c : s){ if(!nxt[p][c - 'a'])nxt[p][c - 'a'] = ++cntUsedNode; p = nxt[p][c - 'a']; sz[p]++; } isEnd[p] = 1; } ll n; string s[N]; string ans; ll done = 0; void dfs(ll u){ if(isEnd[u])done++,ans += 'P'; vector<pair<ll,ll>> vec; REP(c,26)if(nxt[u][c])vec.pb({sz[nxt[u][c]], c}); sort(all(vec)); for(auto [sl, c] : vec){ ans += char('a' + c); dfs(nxt[u][c]); } ans += '-'; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; FOR(i,1,n)cin>>s[i],addstr(s[i]); dfs(0); while(ans.back() == '-')ans.pop_back(); cout<<size(ans)<<endl; REP(i,size(ans))cout<<ans[i]<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...