标签:style blog http color os io for 2014
题意:给一些01串,定义一个P(s)表示:拥有相同长度前缀的字符串个数 * 该前缀长度,求最大的P(S)
思路:Trie,建好Trie树后dfs一遍记录答案最大值
代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int SIGMA_SIZE = 2; struct Node { Node *ch[2]; int val; Node() { ch[0] = ch[1] = NULL; val = 0; } }; struct Trie { Node *root; int ans; int idx(char c) { return c - '0'; } void init() { ans = 0; root = new Node(); } void insert(char *s) { int n = strlen(s); Node *u = root; for (int i = 0; i < n; i++) { int c = idx(s[i]); if (u->ch[c] == NULL) { u->ch[c] = new Node(); } u = u->ch[c]; u->val++; } } void dfs(Node *u, int d) { if (u == NULL) return; ans = max(ans, d * u->val); for (int c = 0; c < SIGMA_SIZE; c++) dfs(u->ch[c], d + 1); } void del(Node *u) { if (u == NULL) return; for (int c = 0; c < SIGMA_SIZE; c++) del(u->ch[c]); delete u; } int solve() { dfs(root, 0); del(root); return ans; } }; Trie gao; int t, n; char str[205]; int main() { scanf("%d", &t); while (t--) { gao.init(); scanf("%d", &n); while (n--) { scanf("%s", str); gao.insert(str); } printf("%d\n", gao.solve()); } return 0; }
UVA 11488 - Hyper Prefix Sets(Trie),布布扣,bubuko.com
UVA 11488 - Hyper Prefix Sets(Trie)
标签:style blog http color os io for 2014
原文地址:http://blog.csdn.net/accelerator_/article/details/38349801