Submission #1326117

#TimeUsernameProblemLanguageResultExecution timeMemory
1326117viliType Printer (IOI08_printer)C++20
20 / 100
191 ms57744 KiB
#include<bits/stdc++.h>
 
using namespace std;
 
#define X first
#define Y second
#define PB push_back
#define LL long long
#define pii pair<int,int>
#define INS insert
const int N=3e5+5;
const int MAX=1e9+5;
 
map<string,set<pair<int,string>>>map2;
map<string,int>map3;
 
vector<char>rj;
string arr[N];
 
void dfs(string tr) {
	
	for (auto it : map2[tr]) {
	
		rj.PB(it.Y[it.Y.size()-1]);
		dfs(it.Y);
	
		rj.PB('-');
	}
	if (map2[tr].size()==0) rj.PB('P');
}
void solve() {
	int n,naj=0;
	cin>>n;
	string s;
	string ss;
	for (int i=0;i<n;i++) {
		cin>>s;
		arr[i] = s;
		if (s.size()>naj) {
			naj=s.size();
			ss=s;
		}
	}
	string s3="";
	for (int i=0;i<ss.size();i++) {
		s3+=ss[i];
		map3[s3]=1;
	}
	
	for (int i=0;i<n;i++) {
			
		string s2 = "";
		for (int j=0;j<arr[i].size();j++) {
			int cc = 0;
			if (map3[s2+arr[i][j]] == 1) cc=1;
			map2[s2].INS({cc,s2+arr[i][j]});
			s2+=arr[i][j];
		}
	}
	
	dfs("");
	
	cout << rj.size()-naj<<"\n";
	for (int i=0;i<rj.size()-naj;i++) {
		cout<<rj[i]<<"\n";
	}
}
 
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	int t=1;
	while (t--) solve();
 
 
	return 0;
}
 
#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...