Submission #57724

#TimeUsernameProblemLanguageResultExecution timeMemory
57724vexType Printer (IOI08_printer)C++14
20 / 100
772 ms76624 KiB
#include <bits/stdc++.h> #define MAXN 25005 #define ALPH 26 using namespace std; struct Node{ int dp[2]; bool kraj; struct Node* deca[ALPH]; }* head; void init() { head=new Node(); head->kraj=false; } void ubaci(string s) { Node* curr=head; for(int i=0;i<s.size();i++) { int zn=s[i]-'a'; if(curr->deca[zn]==NULL) { curr->deca[zn]=new Node(); curr->deca[zn]->kraj=false; } curr=curr->deca[zn]; } curr->kraj=true; } void resi(Node* v) { int br=0; for(int i=0;i<ALPH;i++)if(v->deca[i]!=NULL)br++; if(br==0) { v->dp[0]=v->dp[1]=1; return; } v->dp[0]=0; int sum=0; for(int i=0;i<ALPH;i++) { if(v->deca[i]!=NULL) { Node* nv=v->deca[i]; resi(nv); sum+=nv->dp[0]; v->dp[0]+=2; } } v->dp[0]+=sum; v->dp[1]=v->dp[0]-1; for(int i=0;i<ALPH;i++) { if(v->deca[i]!=NULL) { Node* nv=v->deca[i]; if( (v->dp[0]) -1- (nv->dp[0]) + (nv->dp[1]) < (v->dp[1])) v->dp[1] = (v->dp[0]) -1- (nv->dp[0]) + nv->dp[1]; } } if(v->kraj) { v->dp[0]++; v->dp[1]++; } } void ispisi(Node* v,int w) { int br=0; for(int i=0;i<ALPH;i++)if(v->deca[i]!=NULL)br++; if(br==0) { cout<<"P"<<endl; return; } int sum=0; for(int i=0;i<ALPH;i++) { if(v->deca[i]!=NULL) { Node* nv=v->deca[i]; sum+= (nv->dp[0]) + 2; } } int delta=0; if(v->kraj) { cout<<"P"<<endl; delta=1; } if(w==0) { for(int i=0;i<ALPH;i++) { if(v->deca[i]!=NULL) { Node* nv=v->deca[i]; cout<<char('a'+i)<<endl; ispisi(nv,0); cout<<"-"<<endl; } } } else{ int ind=-1; for(int i=0;i<ALPH;i++) { if(v->deca[i]!=NULL) { Node* nv=v->deca[i]; if( (v->dp[0]) -1- (nv->dp[0]) + (nv->dp[1]) + delta== v->dp[1] ) ind=i; } } for(int i=0;i<ALPH;i++) { if(v->deca[i]!=NULL && i!=ind) { Node* nv=v->deca[i]; cout<<char('a'+i)<<endl; ispisi(nv,0); cout<<"-"<<endl; } } cout<<char('a'+ind)<<endl; ispisi(v->deca[ind],1); } } int n; string x; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); init(); cin>>n; for(int i=0;i<n;i++) { cin>>x; ubaci(x); } resi(head); cout<<head->dp[1]<<endl; ispisi(head,1); return 0; }

Compilation message (stderr)

printer.cpp: In function 'void ubaci(std::__cxx11::string)':
printer.cpp:20:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<s.size();i++)
                 ~^~~~~~~~~
#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...