Submission #620058

#TimeUsernameProblemLanguageResultExecution timeMemory
6200581neType Printer (IOI08_printer)C++14
100 / 100
841 ms87916 KiB
#include<bits/stdc++.h> using namespace std; string mx; bool compare(string &a,string &b){ for(int i = 0 ;i < (int)a.size() && i < (int)b.size();i++){ if(a[i] == b[i]) continue; if(a[i] == mx[i]) return false; if(b[i] == mx[i]) return true; return (a[i] < b[i]); } return (int)a.size() < (int)b.size(); } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; vector<string>arr(n); for (int i = 0;i<n;++i){cin>>arr[i];if (arr[i].length() > mx.length())mx = arr[i];} map<string,set<int>>brr; sort(arr.begin(),arr.end(),compare); for (int i = 0;i<n;++i){ string s; for (auto x:arr[i]){ s+=x; brr[s].insert(i); } } vector<char>ans; vector<int>taken(n,false); for (int i = 0;i<n;++i){ if (!taken[i]){ string cur; for (int j = 0;j<(int)arr[i].length();++j){ ans.push_back(arr[i][j]); cur+=arr[i][j]; } ans.push_back('P'); taken[i] = true; while(!cur.empty()){ while(!brr[cur].empty() && taken[*brr[cur].begin()]){ brr[cur].erase(*brr[cur].begin()); } if (!brr[cur].empty()){ int x = *brr[cur].begin(); //cout<<cur<<" "<<x<<'\n'; taken[x] = true; while(cur.length() < arr[x].length()){ ans.push_back(arr[x][cur.length()]); cur+=ans.back(); } ans.push_back('P'); continue; } ans.push_back('-'); cur.pop_back(); } } } while(!ans.empty() && ans.back() =='-')ans.pop_back(); cout<<ans.size()<<'\n'; for (auto x:ans)cout<<x<<'\n'; return 0; }
#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...