CF 1083 B. The Fair Nut and Strings
B. The Fair Nut and Strings 题目链接 题意: 在给定的字符串a和字符串b中找到最多k个字符串,使得不同的前缀字符串的数量最多。 分析: 建出trie树,给定的两个字符串就是trie树上的两条长度为n路径,那么就是在第n层的所有节点中,找到不大于k个点,(第n层的每个点向上到根的路径的路径上的字符组成一个长度为n字符串)。 两个第n层的节点一共会构成2n-lca个不同的前缀。所有可以根据这个贪心的选。每次尽量选已经走过的路径尽量少的路径。 从n往后枚举,计算长度为答案为i的可以选几个。 注意判断一下最后是否可以选择k个, 和已经选了的路径。 代码: 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5 #include<iostream> 6 #include<cctype> 7 #include< set > 8 #include<map> 9 #include<queue> 10 #include<vector> 11 #define fi(s) freopen(s,"r",stdin) 12 #define fo(s) freopen(s,"w",stdout) 13 using namespace std; 14