Submission #953531

#TimeUsernameProblemLanguageResultExecution timeMemory
953531DarkKnight101Type Printer (IOI08_printer)C++17
10 / 100
870 ms97532 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
 
#define endl "\n"
#define aint(v) v.begin(),v.end()
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define forl(i,n) for(int i=0;i<n;i++)

const ll WMAX = 5e5+5;
const ll MOD = 1e9 + 7;

ll trie[WMAX][26];
ll node_count;
bool stop[WMAX];

/** Adds a new word into the trie. */
void insert_word(string& word) {
	// Node 0 has 26 children - a through z.
	ll node = 0;
	for (char c : word) {
		// If a node with the current char doesn't exist create one.
		if (trie[node][c - 'a'] == 0) { trie[node][c - 'a'] = ++node_count; }
		// Move down the path in the trie.
		node = trie[node][c - 'a'];
	}
	// Mark the ending node so we know it's a dictionary word
	stop[node] = true;
}

vector<vector<char> > ans(26);


void fun(ll node,ll curr){
    forl(i,26){
        if(trie[node][(i+curr)%26]){
            ans[curr].pb(97+(i+curr)%26);
            
            if(stop[trie[node][(i+curr)%26]]) {
                ans[curr].pb('P');
            }
            
            fun(trie[node][(i+curr)%26],curr);
            ans[curr].pb(45);
        }
    }
}

void solve(){
    ll n;
    cin >> n;
    string s;
    forl(i,n){
        cin >> s;
        insert_word(s);
    }
    forl(i,26){
        fun(0,i);
        while(ans[i].back()=='-') ans[i].pop_back();
    }
    ll mn = LLONG_MAX, ind = 0;
    forl(i,26){
        if(ans[i].size()<mn){
            mn = ans[i].size();
            ind = i;
        }   
    }
    cout << mn << endl;
    for(auto i:ans[ind]) cout << i << endl;


}



int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int tt=1;
    // cin >> tt;
    while (tt--){
        solve();
    }
}

Compilation message (stderr)

printer.cpp: In function 'void solve()':
printer.cpp:67:25: warning: comparison of integer expressions of different signedness: 'std::vector<char>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   67 |         if(ans[i].size()<mn){
      |            ~~~~~~~~~~~~~^~~
#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...