답안 #384746

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
384746 2021-04-02T07:09:30 Z hivakarami Type Printer (IOI08_printer) C++14
80 / 100
768 ms 262144 KB
#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long int ll;
typedef long double ld;
#define f first
#define s second
 
const int N = 3e5 + 100;
const ll mod = 998244353;
const ll inf = 1e9 + 10;

int node = 1;
bool mark[N], last[N];
deque<char> ans;
vector<pair<int, int>> adj[N];
int h[N], c[N][30], par[N];


void dfs(int u)
{
	if(mark[u])
		ans.push_back('P');
		
	int x2 = -1, t2 = -1;	
	for(auto it : adj[u])
	{
		int x = it.f, t = it.s;
		if(last[x])
		{
			x2 = x;
			t2 = t;
			continue;
		}
		
		ans.push_back(char(t+'a'));
		dfs(x);
	}
	
	if(x2 != -1)
	{
		ans.push_back(char(t2+'a'));
		dfs(x2);
	}
	
	ans.push_back('-');
	
}



void add(int u, string s)
{
	if(h[u] == s.size())
	{
		mark[u] = true;
		return;
	}
	
	int t = s[h[u]]-'a';
	
	if(c[u][t] == 0)
	{
		c[u][t] = node;
		adj[u].push_back({node, t});
		h[node] = h[u] + 1;
		par[node] = u;
		node++;
	}
	add(c[u][t], s);
}


 
int main()
{
    ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);	
	
	int n;
	cin >> n;
	for(int i = 0; i < n; i++)
	{
		string s;
		cin >> s;
		add(0, s);
	}
	
	int mx = 0;
	for(int i = 0; i < node; i++)
	{
		if(h[i] > h[mx])
			mx = i;
	}
	
	while(mx != 0)
	{
		last[mx] = true;
		mx = par[mx];
	}
	
	dfs(0);
	
	
	while(ans.size() && ans.back() == '-')
		ans.pop_back();
	
	cout << ans.size() << endl;
	for(auto t : ans)
		cout << t << endl;
	
	
		
	return 0;
}
 
/*
3
print
the
poem
*/

 

Compilation message

printer.cpp: In function 'void add(int, std::string)':
printer.cpp:55:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |  if(h[u] == s.size())
      |     ~~~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 7404 KB Output is correct
2 Correct 6 ms 7404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 7404 KB Output is correct
2 Correct 6 ms 7404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 7404 KB Output is correct
2 Correct 6 ms 7552 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 7404 KB Output is correct
2 Correct 6 ms 7404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 7532 KB Output is correct
2 Correct 23 ms 8044 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 8564 KB Output is correct
2 Correct 47 ms 8812 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 127 ms 11500 KB Output is correct
2 Correct 260 ms 16128 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 310 ms 17764 KB Output is correct
2 Correct 97 ms 9684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 768 ms 33436 KB Output is correct
2 Runtime error 255 ms 262144 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 629 ms 27372 KB Output is correct
2 Runtime error 246 ms 262144 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -