Submission #705948

#TimeUsernameProblemLanguageResultExecution timeMemory
705948assem_albitarType Printer (IOI08_printer)C++14
80 / 100
155 ms127304 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define mod 1000000007 #define mxe(v) *max_element(v.begin(), v.end()) #define all(v) v.begin(), v.end() #define allr(v) v.rbegin(),v.rend() #define F first #define S second #define pi pair<ll,ll> #define assem ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define yes cout<<"YES"<<endl; #define no cout<<"NO"<<endl; using namespace std; const int N=400200; const double PI=3.1415926535897932384626433; const double eps = 1e-9; string getString() { char c[(int)21]; //scanf(" %c",&a[i]); scanf("%s", c); return c; //string x = getString(); } ///printf("%d\n",); ///scanf("%d",&); ///cout.precision(10); ///puts("")string vector<char> ans; int n; vector<string> v; struct trie { int cnt,c; vector<char> a; trie* child[26]; trie() { cnt=c=0; memset(child,0,sizeof child); } void add(int i,int j) { if(j==v[i].size()) { c++; cnt=j; return; } if(child[v[i][j]-'a']==0) { child[v[i][j]-'a']=new trie(); child[v[i][j]-'a']->add(i,j+1); a.push_back(v[i][j]); } else { child[v[i][j]-'a']->add(i,j+1); } if(child[v[i][j]-'a']->cnt>cnt)cnt=child[v[i][j]-'a']->cnt; } void get() { if(c) { ans.push_back('P'); } bool f=1; char id='a'; for(int i=0;i<a.size(); i++) { if(f&&child[a[i]-'a']!=0&&child[a[i]-'a']->cnt==cnt) { f=0; id=a[i]; } else if(child[a[i]-'a']!=0) { ans.push_back(a[i]); child[a[i]-'a']->get(); ans.push_back('-'); } } if(!f) { ans.push_back(id); child[id-'a']->get(); ans.push_back('-'); } return; } }; int main() { scanf("%d",&n); trie* root=new trie(); for(int i=0; i<n; i++) { string q; q=getString(); v.push_back(q); root->add(i,0); } root->get(); while(ans.back()=='-')ans.pop_back(); printf("%d\n",(int)ans.size()); for(int i=0; i<ans.size(); i++) { printf("%c\n",ans[i]); } }

Compilation message (stderr)

printer.cpp: In member function 'void trie::add(int, int)':
printer.cpp:45:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |         if(j==v[i].size())
      |            ~^~~~~~~~~~~~~
printer.cpp: In member function 'void trie::get()':
printer.cpp:71:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |         for(int i=0;i<a.size(); i++)
      |                     ~^~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:109:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  109 |     for(int i=0; i<ans.size(); i++)
      |                  ~^~~~~~~~~~~
printer.cpp: In function 'std::string getString()':
printer.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |     scanf("%s", c);
      |     ~~~~~^~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:97:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
#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...