답안 #1093858

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1093858 2024-09-27T18:35:40 Z lambd47 Type Printer (IOI08_printer) C++14
20 / 100
44 ms 54864 KB
#include<bits/stdc++.h>
using namespace std;

const int MX=5e5+7;

int trie[MX][27];

char letra[MX];
bool ultimo[MX];
bool acabou[MX];
int tempo=0;

void add(string s, bool flag){
    int idat=0;
    for(auto c: s){
        int nat=c-'a';
        if(trie[idat][nat]!=-1){
            idat=trie[idat][nat];
        }
        else{
            trie[idat][nat]=++tempo;
            idat=tempo;
            letra[idat]=c;
        }
        if(flag)ultimo[idat]=1;
    }
    acabou[idat]=1;
}
int n;
int cnt=0;
void dfs(int node){
    if(node!=0)cout<<letra[node]<<"\n";
    int esp=-1;
    bool folha=1;
    for(int i=0;i<26;i++){
        if(trie[node][i]==-1)continue;
        folha=0;
        if(ultimo[trie[node][i]]){
            esp=trie[node][i];
            continue;
        }
        dfs(trie[node][i]);
    }
    if(esp!=-1){
        dfs(esp);
    }
    if(acabou[node]){cout<<"P\n";cnt++;}
    if(cnt!=n && !ultimo[node])cout<<"-\n";
}



int main(){
    cin>>n;
    for(int i=0;i<MX;i++){
        for(int j=0;j<27;j++)trie[i][j]=-1;
    }
    vector<string> vec(n);
    int especial=0;
    int maior=0;
    for(int i=0;i<n;i++){cin>>vec[i];
        if(maior<vec[i].size()){
            maior=vec[i].size();
            especial=i;
        }
    }
    for(int i=0;i<n;i++){
        if(especial==i){
            add(vec[i],1);
        }
        else{
            add(vec[i],0);
        }
    }
    cout<<2*(tempo)-maior+n<<"\n";
    dfs(0);



}

Compilation message

printer.cpp: In function 'void dfs(int)':
printer.cpp:34:10: warning: variable 'folha' set but not used [-Wunused-but-set-variable]
   34 |     bool folha=1;
      |          ^~~~~
printer.cpp: In function 'int main()':
printer.cpp:62:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         if(maior<vec[i].size()){
      |            ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 53080 KB Output is correct
2 Correct 24 ms 53084 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 53084 KB Output is correct
2 Correct 22 ms 53084 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 23 ms 53084 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 53236 KB Output is correct
2 Incorrect 23 ms 53076 KB printed invalid word
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 24 ms 53072 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 24 ms 53332 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 26 ms 53336 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 31 ms 53852 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 44 ms 54864 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 40 ms 54612 KB printed invalid word
2 Halted 0 ms 0 KB -