Submission #1184579

#TimeUsernameProblemLanguageResultExecution timeMemory
1184579amm_ouxType Printer (IOI08_printer)C++20
10 / 100
49 ms38880 KiB
#include <bits/stdc++.h> using namespace std ; #ifdef LOCAL #include "/Library/debug/debug.h" #define debug(x...) cerr << "[" << #x << "] = ["; _print(x) #else #define debug(x...) #endif #define MAX 2e9 #define MIN -2e9 #define PI acos(-1.0) #define mid(s, e) ((s) + ((e) - (s)) / 2) #define clz(n) __builtin_clzll(n) #define nbOfBits(n) __builtin_popcountll(n) #define all(x) (x).begin(), (x).end() #define endl '\n' #define pb push_back #define sz(a) static_cast<int>((a).size()) #define double long double #define fi first #define fill(n,arr) = for(int i=1;i<=n;i++){ll x;cin>>x;arr.pb(x);} #define se second #define getunique(v) {sort(all(v)); v.erase(unique(all(v)), v.end());} #define getlower(s) transform(s.begin(), s.end(), s.begin(), ::tolower) #define getupper(s) transform(s.begin(), s.end(), s.begin(), ::toupper) #define sort(s) sort(s.begin(), s.end()) #define reverse(s) reverse(s.begin(), s.end()) #define getmax(ans) *(all(ans)); #define getmin(ans) *min_element(all(ans)); using ll = long long; using vll = vector<ll>; using vvll = vector<vll>; using vc = vector<char>; using vvc = vector<vc>; using vb = vector<bool>; using vvb = vector<vb>; using vd = vector<double>; using vvd = vector<vd>; using vs = vector<string>; using pii = pair<int, int>; using pdd = pair<double, double>; using vpii = vector<pii>; using vpdd = vector<pdd>; using si = set<int>; using ssi = set<si>; /* struct trie { char ch ; bool flag = false ; trie* nexts[26] ; }; trie* CreateNode (char letter){ trie * node = new trie ; node->ch = letter ; for (ll i = 0 ; i<26 ; i++ ) node->nexts[i] = NULL ; return node ; } trie* root = CreateNode('0') ; void InsertWord (string word){ trie *Node = root ; for (ll i = 0 ; i<word.size() ; i++){ if (Node->nexts[word[i]-'a'] == NULL){Node->nexts[word[i]-'a']=CreateNode(word[i]) ; } Node = Node->nexts[word[i]-'a'] ; } Node->flag = true ; } bool searchWord (string word){ trie *Node = root ; for (ll i = 0 ; i<word.size() ; i++){ if (Node->nexts[word[i]-'a'] == NULL) return 0 ; else Node = Node->nexts[word[i]-'a'] ; } if (Node->flag) return 1 ; else return 0 ; } void display (trie * ROOT , string saved){ trie *node ; string s = saved ; for (ll i = 0 ; i < 26 ; i++){ if (ROOT->nexts[i] != NULL) {node = ROOT->nexts[i] ; s +=node->ch ; if (node->flag) cout << s << endl ; display (node , s ) ; s = saved ;} } } void SOlve(){ cout << "How many words to insert ? " << endl ; ll n ; cin >> n ; string word ; for (ll i = 0 ; i < n ; i++){ cin >> word ; InsertWord (word) ; } display(root , "") ; cout << "how many words are u looking for ? " << endl ; cin >> n ; for (ll i = 0 ; i < n ; i++){ cin >> word ; if (searchWord (word)) cout << " YES .. It is there !! " << endl ; else cout << " NO .. It isn't there !! " << endl ; } } */ string ans = "" ; struct trie { char l ; trie * child [26] ; ll wordend = 0 ; }; trie* createNode (char ch){ trie * node = new trie ; node->l = ch ; for (ll i = 0 ; i< 26 ; i++){ node->child[i] = NULL ; } return node ; } trie * root = createNode ('0') ; void insertWord (string word){ trie * node = root ; for (ll i = 0 ; i < word.size() ; i++){ if (node->child [word[i]-'a'] == NULL){node->child [word[i]-'a'] = createNode(word[i]) ; } node = node->child [word[i]-'a'] ; } node->wordend ++ ; } void carefulDfsOnTrie (trie * prevnode , char watchout ){ trie* node ; for (ll i = 0 ; i < 26 ; i++){ node = prevnode->child[i] ; if (i == watchout - 'a' ) continue ; if (node == NULL) continue ; else { ans += node->l ; for (ll k = 0 ; k < node->wordend ; k++ ) ans += 'P' ; carefulDfsOnTrie(node , '1' ) ; ans += '-' ; } } } void leftDfsOnTrie (trie * prevnode ){ trie* node ; for (ll i = 0 ; i < 26 ; i++){ node = prevnode->child[i] ; if (node == NULL) continue ; else { ans += node->l ; for (ll k = 0 ; k < node->wordend ; k++ ) ans += 'P' ; carefulDfsOnTrie(node , '1' ) ; ans += '-' ; } } } void solve (){ ll n ; cin >> n ; string s ; ll maxl = 0 ; char deepestch ; for ( ll i = 0 ; i < n ; i++){ cin >> s ; if (s.size() > maxl) {maxl = s.size() ; deepestch = s[0] ;} insertWord(s); } carefulDfsOnTrie(root , deepestch ) ; ans+= deepestch ; leftDfsOnTrie(root->child[deepestch-'a']) ; cout << ans .size() - maxl + 1 << endl; for (ll i = 0 ; i < ans .size() - maxl +1 ; i++ ){ cout << ans [i] << endl ; } } signed main() { //ios::sync_with_stdio(false); cin.tie(0); ll t;t= 1 ; while(t--) solve(); }
#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...