51nod 1526 分配笔名(Trie树+贪心)】的更多相关文章

建出Trie树然后求出一个点子树中有多少笔名和真名.然后贪心匹配即可. #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int N=810000; int ans,n; char s[N]; struct trie{ int trans[N][27],tot,si…
题意: 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名为a,真名为b,则他们之间的相关度为lcp(a,b).那么我们就可以得到匹配的质量是每一个同学笔名和真名之间相关度的和. 现在要求分配笔名,使得匹配质量最大. 题解: 对于真名建立一个字典树,然后每个笔名在字典树上打一个标记 然后就变成了贪心,每个点的标记看是否能被字典树上的单词消掉,不能消,就让标…
题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题. 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名为a,真名为b,则他们之间的相关度为lcp(a,b).那么我们就可以得到匹配的质量是每一个同学笔名和真名之间相关度的和. 现在要求分配笔名,使得匹配质量最大. 样例解释: ·      …
[BZOJ3261]最大异或和 Description 给定一个非负整数序列 {a},初始长度为 N.       有   M个操作,有以下两种操作类型:1 .A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1.2 .Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得:a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少. Input 第一行包含两个整数 N  ,M,含义如问题描述所示.   第二行包含 N…
题目链接:http://poj.org/problem?id=3764 分析:好题!武森09年的论文中有道题CowXor,求的是线性结构上的,连续序列的异或最大值,用的办法是先预处理出前n项的异或值,然后在这些值中找出两个值的异或值最大.是基于这样的一个原理,相同段的异或值为0.这题在树中找两个节点,两个节点间有唯一路径(因为是树),把路径不断做异或,异或完后求最大的.数据是10万,O(n2)算法超时.我们知道异或有这样的性质:a^b = (a^c)^(b^c),这样就可以考虑找出a与b公共的c…
题目链接 BZOJ4567 题解 题意真是鬼畜= = 意思就是说我们应先将一个串的所有后缀都插入之后再插入这个串,产生代价为其到上一个后缀的距离 我们翻转一下串,转化为前缀,就可以建\(trie\)树来解决了 建好\(trie\)后单独取出单词节点,贪心先往子树小的节点编号即可 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<queue…
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61705397 Description 给定一个非负整数序列 {a},初始长度为 N. 有 M个操作,有以下两种操作类型: 1 .A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1. 2 .Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得: a[p] xor a[p+1] xor - xor a[N]…
题目链接 大致题意 给你 \(n\) 个字符串, 要求你给出最小的代价. 对于每个字符串: 1.如果它的后缀在它之后,那么代价为 \(n^2\). 2.如果一个字符串没有后缀,那么代价为 \(x\), \(x\)是它所处的位置. 3.如果字符串前面有它的后缀且位置为 \(y\),那么代价为 \(x-y\). Solution 比较鬼畜的体面,出题人语文水平亟需提高... 反向建立一棵 Trie 树. 根据 Trie 树对于每一个被标记过的点重新连边. 考虑贪心 条件1 有它一定不是最优的,显然后…
[BZOJ4260]Codechef REBXOR Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. Sample Input 5 1 2 3 1 2 Sample Output 6 HINT 满足条件的(l1,r1,l2,r2)有:(1,2,3,3),(1,2,4,5),(3,3,4,5). 对于100%的数据,2 ≤ N ≤ 4*105,0 ≤ Ai ≤ 1…
题目描述 你需要在$[0,2^n)$中选一个整数$x$,接着把$x$依次异或$m$个整数$a_1~a_m$.在你选出$x$后,你的对手需要选择恰好一个时刻(刚选完数时.异或一些数后或是最后),将$x$变为$(\left \lfloor{\frac{2\times x}{2^n}}\right \rfloor \mod 2^n)$你想使$x$最后尽量大,而你的对手会使$x$最后尽量小.你需要求出$x$最后的最大值,以及得到最大值的初值数量. 输入格式 第一行两个整数$n,m$.第二行$m$个整数$…