답안 #531374

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
531374 2022-02-28T14:34:10 Z yutabi Type Printer (IOI08_printer) C++14
100 / 100
148 ms 101512 KB
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

struct node
{
    node* child[26];

    bool en_buyuk;
    bool count;

    node()
    {
        for(int i=0;i<26;i++)
        {
            child[i]=NULL;

            en_buyuk=0;
            count=0;
        }
    }
};


int n;

vector <string> str;

int maxi;
int ptr;

node start;

node* curr;

vector <char> ans;

void DFS(node* nd)
{
    if(nd->count)
    {
        ans.pb('P');
    }

    vector <node*> ord;
    node* mx=NULL;

    vector <char> ord_ch;
    char mx_ch;
    
    for(int i=0;i<26;i++)
    {
        if(nd->child[i]!=NULL)
        {
            if(nd->child[i]->en_buyuk)
            {
                mx=nd->child[i];
                mx_ch=i;
            }

            else
            {
                ord.pb(nd->child[i]);
                ord_ch.pb(i);
            }
        }
    }
    
    if(mx!=NULL)
    {
        ord.pb(mx);
        ord_ch.pb(mx_ch);
    }

    for(int i=0;i<ord.size();i++)
    {
        ans.pb(ord_ch[i]+'a');
        DFS(ord[i]);
    }

    if(nd->en_buyuk==0)
    {
        ans.pb('-');
    }
}

int main()
{
    cin >> n;

    str=vector <string> (n);

    for(int i=0;i<n;i++)
    {
        cin >> str[i];

        if(str[i].size()>maxi)
        {
            maxi=str[i].size();
            ptr=i;
        }
    }

    start.en_buyuk=1;

    for(int i=0;i<n;i++)
    {
        curr=&start;

        for(int j=0;j<str[i].size();j++)
        {
            if(curr->child[str[i][j]-'a']==NULL)
            {
                node *nw = new node;

                curr->child[str[i][j]-'a']=nw;
            }

            curr=curr->child[str[i][j]-'a'];

            if(j+1==str[i].size())
            {
                curr->count=1;
            }

            if(i==ptr)
            {
                curr->en_buyuk=1;
            }
        }
    }

    DFS(&start);

    printf("%lu\n",ans.size());
    
    for(int i=0;i<ans.size();i++)
    {
        printf("%c\n",ans[i]);
    }
}

Compilation message

printer.cpp: In function 'void DFS(node*)':
printer.cpp:76:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<node*>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |     for(int i=0;i<ord.size();i++)
      |                 ~^~~~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:98:25: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   98 |         if(str[i].size()>maxi)
      |            ~~~~~~~~~~~~~^~~~~
printer.cpp:111:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |         for(int j=0;j<str[i].size();j++)
      |                     ~^~~~~~~~~~~~~~
printer.cpp:122:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  122 |             if(j+1==str[i].size())
      |                ~~~^~~~~~~~~~~~~~~
printer.cpp:138:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  138 |     for(int i=0;i<ans.size();i++)
      |                 ~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 280 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 284 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 2 ms 1100 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1740 KB Output is correct
2 Correct 4 ms 2220 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 5964 KB Output is correct
2 Correct 20 ms 12744 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 15012 KB Output is correct
2 Correct 14 ms 3888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 37132 KB Output is correct
2 Correct 130 ms 85448 KB Output is correct
3 Correct 72 ms 44956 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 49 ms 29244 KB Output is correct
2 Correct 148 ms 101512 KB Output is correct
3 Correct 81 ms 50884 KB Output is correct
4 Correct 133 ms 95936 KB Output is correct