Submission #240079

# Submission time Handle Problem Language Result Execution time Memory
240079 2020-06-18T00:39:41 Z luciocf Rima (COCI17_rima) C++14
56 / 140
549 ms 139896 KB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 3e6+10;

struct Node
{
	Node *b[26];
	int u;
	bool fim;
};

int cnt;

int dp[maxn];

void add(Node *t, string s)
{
	Node *at = t;

	for (auto c: s)
	{
		if (!at->b[c-'a'])
		{
			at->b[c-'a'] = new Node();
			at->b[c-'a']->u = ++cnt;
		}

		at = at->b[c-'a'];
	}

	at->fim = true;
}

void dfs(Node *t)
{
	int mx1 = -1, mx2 = -1;
	int tot = (t->fim);

	for (int i = 0; i < 26; i++)
	{
		if (!t->b[i]) continue;

		dfs(t->b[i]);

		if (t->b[i]->fim)
		{
			int x = dp[t->b[i]->u];

			if (x > mx1) mx2 = mx1, mx1 = x;
			else if (x > mx2) mx2 = x;

			tot++;
		}
	}

	dp[t->u] = tot;

	if (mx2 != -1) dp[t->u] = mx1 + mx2 + tot-2;
	else if (mx1 != -1) dp[t->u] = mx1 + tot-1;
}

int main(void)
{
	Node *root = new Node();
	root->u = 0;

	int n;
	scanf("%d", &n);

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

		reverse(s.begin(), s.end());

		add(root, s);
	}

	dfs(root);

	int ans = 0;
	for (int i = 0; i < maxn; i++)
		ans = max(ans, dp[i]);

	printf("%d\n", ans);
}

Compilation message

rima.cpp: In function 'int main()':
rima.cpp:70:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
  ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 10 ms 512 KB Output is correct
2 Correct 10 ms 384 KB Output is correct
3 Correct 10 ms 384 KB Output is correct
4 Incorrect 549 ms 139896 KB Output isn't correct
5 Correct 155 ms 3832 KB Output is correct
6 Incorrect 116 ms 87348 KB Output isn't correct
7 Incorrect 111 ms 87096 KB Output isn't correct
8 Incorrect 115 ms 86840 KB Output isn't correct
9 Incorrect 251 ms 92600 KB Output isn't correct
10 Incorrect 111 ms 86876 KB Output isn't correct