제출 #1308767

#제출 시각아이디문제언어결과실행 시간메모리
1308767ghammazhassanType Printer (IOI08_printer)C++20
100 / 100
72 ms51584 KiB
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define fi first #define se second const int MAXN = 2000005; int n; int tr[MAXN][26]; int cn[MAXN]; int v = 1; vector<char> operations; string longestWord; int totalOps = 0; int idx = -1; int longestWordIndex[25]; void addWord(const string &s) { int cur = 0; for (int i = 0; i < (int)s.size(); i++) { int c = s[i] - 'a'; if (!tr[cur][c]) { tr[cur][c] = v++; } cur = tr[cur][c]; if (i == (int)s.size() - 1) { cn[cur]++; } } } void dfs(int ch, int cur) { idx++; operations.push_back('-'); totalOps++; if (idx < (int)longestWord.size() && longestWordIndex[idx] == 0) { int nxt = tr[cur][longestWord[idx] - 'a']; longestWordIndex[idx] = nxt; dfs(longestWord[idx] - 'a', nxt); } for (int i = 0; i < 26; i++) { if (!tr[cur][i]) continue; if (idx < (int)longestWord.size() && tr[cur][i] == longestWordIndex[idx]) continue; dfs(i, tr[cur][i]); } totalOps++; if (cn[cur]) { totalOps++; operations.push_back('P'); } operations.push_back(char(ch + 'a')); idx--; } void solve() { cin >> n; vector<pair<int, string>> words(n); for (int i = 0; i < n; i++) { cin >> words[i].se; words[i].fi = words[i].se.size(); } sort(words.begin(), words.end()); for (auto &w : words) { addWord(w.se); } longestWord = words.back().se; dfs(0, 0); operations.pop_back(); reverse(operations.begin(), operations.end()); int resultOps = totalOps - longestWord.size() - 2; cout << resultOps << endl; for (int i = 0; i < resultOps; i++) { cout << operations[i] << endl; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); 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...