Submission #197668

#TimeUsernameProblemLanguageResultExecution timeMemory
197668SakamotooType Printer (IOI08_printer)C++14
100 / 100
247 ms139628 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef tree < long long , null_type , less<long long> , rb_tree_tag , tree_order_statistics_node_update > ordered_set; #define mp make_pair #define fi first #define se second //mt19937 rng(time(NULL)); //int mt19937_64 rng(time(NULL)); //Long Long //shuffle(a.begin(),a.end(),rng); //shuffle //rng(); //random struct node{ vector<int> v; node *c[30]; node *b; int cnt=0; int mark=0; }; node *root= new node; void ins(string s){ node *now=root; for(int i=0; i<s.size(); i++){ int ind=s[i]-'a'+1; if(now->c[ind]==NULL){ now->c[ind]=new node; now->c[ind]->b=now; now->v.push_back(ind); } now=now->c[ind]; } now->cnt++; } void ins2(string s){ node *now=root; for(int i=0; i<s.size(); i++){ int ind=s[i]-'a'+1; if(now->c[ind]==NULL){ now->c[ind]=new node; now->c[ind]->b=now; now->v.push_back(ind); } now->mark=ind; now=now->c[ind]; } now->cnt++; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin>>n; string pan; cin>>pan; for(int i=2; i<=n; i++){ string s; cin>>s; if(s.size()>pan.size()){ ins(pan); pan=s; }else { ins(s); } } ins2(pan); // cout<<"kenapa"<<endl; int pri=0; node *now=root; vector<char> v; while(true){ if(pri==n) break; if(now->cnt>0){ now->cnt--; v.push_back('P'); pri++; continue; } int ind=0; int wkwk=now->v.size(); int sk=0; for(int j=0; j<wkwk; j++){ int i=now->v[j]; if(i!=now->mark||wkwk==1){ sk=j; ind=i; break; } } if(ind==0){ v.push_back('-'); now=now->b; }else { v.push_back('a'+ind-1); now->v.erase(now->v.begin()+sk); now=now->c[ind]; } } cout<<v.size()<<endl; for(int i=0; i<v.size(); i++){ printf("%c\n",v[i]); } }

Compilation message (stderr)

printer.cpp: In function 'void ins(std::__cxx11::string)':
printer.cpp:30:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<s.size(); i++){
               ~^~~~~~~~~
printer.cpp: In function 'void ins2(std::__cxx11::string)':
printer.cpp:44:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<s.size(); i++){
               ~^~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:110:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v.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...