Submission #408830

#TimeUsernameProblemLanguageResultExecution timeMemory
408830JasiekstrzType Printer (IOI08_printer)C++17
100 / 100
153 ms51048 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int M=5e5;
map<char,int> e[M+10];
int en[M+10];
int mx[M+10];
void add(int x,string &s,int i,int &m)
{
	if(i==s.size())
	{
		en[x]++;
		mx[x]=max(mx[x],i);
		return;
	}
	if(e[x][s[i]]==0)
		e[x][s[i]]=++m;
	add(e[x][s[i]],s,i+1,m);
	mx[x]=max(mx[x],mx[e[x][s[i]]]);
	return;
}
void dfs(int x,string &s,bool all)
{
	while(en[x]--)
		s+='P';
	if(e[x].empty())
		return;
	int mxx=-1;
	char g='a';
	for(auto v:e[x])
	{
		if(mx[v.se]>mxx)
		{
			mxx=mx[v.se];
			g=v.fi;
		}
	}
	for(auto v:e[x])
	{
		if(v.fi!=g)
		{
			s+=v.fi;
			dfs(v.se,s,true);
			s+='-';
		}
	}
	s+=g;
	dfs(e[x][g],s,all);
	if(all)
		s+='-';
	return;
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n,m=1;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		string s;
		cin>>s;
		add(1,s,0,m);
	}
	string ans;
	dfs(1,ans,false);
	cout<<ans.size()<<"\n";
	for(auto v:ans)
		cout<<v<<"\n";
	return 0;
}

Compilation message (stderr)

printer.cpp: In function 'void add(int, std::string&, int, int&)':
printer.cpp:11:6: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |  if(i==s.size())
      |     ~^~~~~~~~~~
#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...