답안 #730700

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
730700 2023-04-26T09:40:19 Z lucri Type Printer (IOI08_printer) C++17
100 / 100
126 ms 53988 KB
#include <bits/stdc++.h>
using namespace std;
int n,a[650010][30],ans,nr;
char lmax,c[25],cmax[25];
void adauga()
{
    int l=strlen(c),nod=0;
    for(int i=0;i<l;++i)
    {
        if(a[nod][c[i]-'a'])
            nod=a[nod][c[i]-'a'];
        else
        {
            a[nod][c[i]-'a']=++nr;
            nod=nr;
        }
    }
    ++a[nod][26];
}
void elimina(int str,int nod,bool rb)
{
    for(int i=0;i<26;++i)
    {
        if(a[nod][i]&&(rb==false||rb==true&&i+'a'!=cmax[str]))
        {
            cout<<(char)(i+'a')<<'\n';
            elimina(str+1,a[nod][i],false);
        }
    }
    while(a[nod][26]--)
        cout<<"P\n";
    if(rb==true)
    {
        if(str<lmax)
        {
            cout<<cmax[str]<<'\n';
            elimina(str+1,a[nod][cmax[str]-'a'],true);
        }
    }
    else
        cout<<"-\n";
}
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>c;
        adauga();
        ++ans;
        if(strlen(c)>lmax)
        {
            lmax=strlen(c);
            for(int i=0;i<lmax;++i)
                cmax[i]=c[i];
        }
    }
    cout<<nr*2+ans-lmax<<'\n';
    elimina(0,0,true);
    return 0;
}

Compilation message

printer.cpp: In function 'void elimina(int, int, bool)':
printer.cpp:24:43: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   24 |         if(a[nod][i]&&(rb==false||rb==true&&i+'a'!=cmax[str]))
      |                                   ~~~~~~~~^~~~~~~~~~~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:51:21: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'char' [-Wsign-compare]
   51 |         if(strlen(c)>lmax)
      |            ~~~~~~~~~^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 216 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 308 KB Output is correct
2 Correct 1 ms 312 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 312 KB Output is correct
2 Correct 1 ms 724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1108 KB Output is correct
2 Correct 3 ms 1236 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 3268 KB Output is correct
2 Correct 14 ms 6868 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 7996 KB Output is correct
2 Correct 10 ms 1988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 43 ms 19904 KB Output is correct
2 Correct 95 ms 45408 KB Output is correct
3 Correct 60 ms 23500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 43 ms 15612 KB Output is correct
2 Correct 126 ms 53988 KB Output is correct
3 Correct 66 ms 26700 KB Output is correct
4 Correct 99 ms 50984 KB Output is correct