답안 #226639

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
226639 2020-04-24T16:01:38 Z tushar_2658 Type Printer (IOI08_printer) C++14
20 / 100
730 ms 70780 KB
#include "bits/stdc++.h"
using namespace std;

const int maxn = 25005;
string s[maxn];
int t[maxn * 20][26], cnt[maxn * 20 * 26];
int node = 0;
int par[maxn * 20 * 26];

void insert(string s){
	int mx = s.size();
	int cur = 0;
	for(auto c : s){
		if(!t[cur][c - 'a']){
			t[cur][c - 'a'] = ++node;
		}
		cnt[t[cur][c - 'a']] = max(cnt[t[cur][c - 'a']], mx);
		par[t[cur][c - 'a']] = cur;
		cur = t[cur][c - 'a'];
	}
}

vector<char> v;

void dfs(int cur){
	bool leaf = 1;
	for(int i = 0; i < 26; ++i){
		if(t[cur][i]){
			leaf = 0;
			break;
		}
	}
	if(leaf){
		v.push_back('P');
		int x = par[cur];
		int prv = cur;
		while(x != -1){
			vector<int> vv;
			for(int i = 0; i < 26; ++i){
				if(t[x][i]){
					vv.push_back(i);
				}
			}
			if(vv.size() == 1){
				v.push_back('-');
				t[x][vv[0]] = 0;
			}else {
				for(int i = 0; i < 26; ++i){
					if(t[x][i] == prv){
						v.push_back('-');
						t[x][i] = 0;
						break;
					}
				}
				break;
			}
			prv = x;
			x = par[x];
		}
		return;
	}
	vector<pair<int, pair<int, int>>> vv;
	for(int i = 0; i < 26; ++i){
		if(t[cur][i]){
			vv.push_back(make_pair(cnt[t[cur][i]], make_pair(t[cur][i], i)));
		}
	}
	sort(vv.begin(), vv.end());
	for(auto i : vv){
		v.push_back((char)(i.second.second + 'a'));
		dfs(i.second.first);
	}
}

int main(int argc, char const *argv[])
{
//	freopen("in.txt", "r", stdin);
	int n;
	cin >> n;
	memset(par, -1, sizeof par);
	for(int i = 0; i < n; ++i){
		cin >> s[i];
		insert(s[i]);
	}
	dfs(0);
	while(v.back() == '-')v.pop_back();
	cout << v.size() << endl;
	for(auto i : v){
		cout << i << endl;
	}

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 52096 KB Output is correct
2 Correct 32 ms 51832 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 52088 KB Output is correct
2 Correct 32 ms 52088 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 29 ms 51960 KB didn't print every word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 51968 KB Output is correct
2 Incorrect 28 ms 52088 KB didn't print every word
# 결과 실행 시간 메모리 Grader output
1 Incorrect 32 ms 52088 KB didn't print every word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 59 ms 52832 KB didn't print every word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 137 ms 54780 KB didn't print every word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 296 ms 59372 KB didn't print every word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 730 ms 70780 KB didn't print every word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 603 ms 66284 KB didn't print every word
2 Halted 0 ms 0 KB -