Submission #1281582

#TimeUsernameProblemLanguageResultExecution timeMemory
1281582Jawad_Akbar_JJType Printer (IOI08_printer)C++20
20 / 100
49 ms13064 KiB
#include <iostream>
#include <vector>

using namespace std;
int Ans;

struct node{
	char cur;
	int hei = 0;
	vector<node*> vec;

	void insert(string s, int ind){
		if (ind == s.size()){
			hei = s.size();
			return;
		}
		hei = max(hei, (int)s.size());

		for (int i=0;i<vec.size();i++){
			if (vec[i]->cur == s[ind]){
				vec[i]->insert(s, ind+1);
				if (i != vec.size() - 1 and vec[vec.size() - 1]->hei < vec[i]->hei)
					swap(vec[i], vec[vec.size() - 1]);
				return;
			}
		}

		node *Nw = new node();
		Nw->cur = s[ind];
		Nw->insert(s, ind+1);
		vec.push_back(Nw);
		if (vec.size() > 1 and vec[vec.size()-2]->hei > Nw->hei)
			swap(vec[vec.size() - 2], vec[vec.size() - 1]);

		Ans += 2;
	}

	void traverse(bool t){
		if (vec.size() == 0)
			cout<<"P\n";
		for (int i=0;i<vec.size();i++){
			cout<<vec[i]->cur<<'\n';
			vec[i]->traverse(t & (i == vec.size() - 1));
		}
		if (!t)
			cout<<"-\n";
	}


};

int main(){
	int n;
	cin>>n;

	node *rt = new node();
	for (int i=1;i<=n;i++){
		string s;
		cin>>s;

		rt->insert(s, 0);
		cout<<endl;
	}
	cout<<Ans - rt->hei + n<<'\n';
	rt->traverse(1);
}
#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...