Submission #1000402

# Submission time Handle Problem Language Result Execution time Memory
1000402 2024-06-17T12:30:57 Z AtabayRajabli Type Printer (IOI08_printer) C++17
100 / 100
919 ms 132812 KB
#include <bits/stdc++.h>
 
// author : a1abay                                                                                                                            
 
using namespace std;
 
#define int ll
#define all(v) v.begin(), v.end()
 
typedef long long ll;
typedef long double ld;
const int inf = 1e9 + 7;
const int inff = (int)1e18 + 7;
const int sz = 25e3 + 5;
 
int n, k, x, cnt;
int t[sz * 26][26], mx[sz * 26], d[sz * 26], ch[sz * 26];
bool w[sz * 26];
vector<int> g[sz * 26];
string s;

bool cmp(int a, int b)
{
    return mx[a] < mx[b];
}
 
void add(int ind, int cur)
{
    if(ind == s.size()) 
    {
        w[cur] = 1;
        return;
    }
    int prv = cur;
    if(t[cur][s[ind] - 'a']) 
    {
        cur = t[cur][s[ind] - 'a'];
    }
    else 
    {
        d[++x] = d[cur] + 1;
        mx[x] = d[x];
        ch[x] = s[ind];
        cur = t[cur][s[ind] - 'a'] = x;
    }
    add(ind + 1, cur);
    mx[prv] = max(mx[prv], mx[cur]);
    g[prv].push_back(cur);
}

void calc(int v, char c)
{
    cnt++;
    cout << c << endl;
    if(w[v]) cout << "P" << endl;
    for(auto i : g[v])
    {
        calc(i, ch[i]);
    }
    if(cnt < x)cout << "-" << endl;
}
 
void solve()
{
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cin >> s;
        add(0, 0);
    }
    for(int i = 0; i <= x; i++) 
    {
        sort(all(g[i]));   
        g[i].erase(unique(all(g[i])), g[i].end());
        sort(all(g[i]), cmp);
    } 
    cout << x * 2 - mx[0] + n << endl;
    for(auto i : g[0])
    {
        calc(i, ch[i]);
    }
}
 
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0); 
    
    int t = 1;
    // cin >> t;
    while(t--)
    {
        solve();
    }
}

Compilation message

printer.cpp: In function 'void add(ll, ll)':
printer.cpp:29:12: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     if(ind == s.size())
      |        ~~~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 19032 KB Output is correct
2 Correct 3 ms 19036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 17048 KB Output is correct
2 Correct 3 ms 16988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 17044 KB Output is correct
2 Correct 3 ms 16984 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Correct 3 ms 16988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 16988 KB Output is correct
2 Correct 10 ms 17756 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 18764 KB Output is correct
2 Correct 27 ms 21212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 57 ms 23368 KB Output is correct
2 Correct 122 ms 30556 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 147 ms 33180 KB Output is correct
2 Correct 50 ms 21852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 378 ms 58452 KB Output is correct
2 Correct 801 ms 114380 KB Output is correct
3 Correct 436 ms 68948 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 299 ms 50388 KB Output is correct
2 Correct 919 ms 132812 KB Output is correct
3 Correct 515 ms 75744 KB Output is correct
4 Correct 904 ms 126416 KB Output is correct