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).那么我们就可以得到匹配的质量是每一个同学笔名和真名之间相关度的和. 现在要求分配笔名,使得匹配质量最大. 题解: 对于真名建立一个字典树,然后每个笔名在字典树上打一个标记 然后就变成了贪心,每个点的标记看是否能被字典树上的单词消掉,不能消,就让标…
用优先队列来贪心,是一个很好地想法.优先队列在很多时候可以维护最值,同时可以考虑到一些其他情况. http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1163 #include<queue> #include<stack> #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #…
Description 有 \(k\) 个长度为 \(n\) 的只含 \(a\) 或 \(b\) 字符串,并不知道它们具体是多少,只知道它们的字典序不小于字符串 \(A\),同时不大于字符串 \(B\).定义一个字符串是合法的当且仅当它是这 \(k\) 个字符串之一的前缀(如果它是多个串的前缀那么只计算一次).求合法的字符串最大可能是多少 Input 第一行是两个整数 \(n\) 和 \(k\) 下面两行,第一行是长度为 \(n\) 的字符串 \(A\),第二行是长度为 \(n\) 的字符串 \…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1625 1625 夹克爷发红包 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 在公司年会上,做为互联网巨头51nod掌门人的夹克老爷当然不会放过任何发红包的机会.   现场有n排m列观众,夹克老爷会为每一名观众送出普通现金红包,每个红包内金额随机.   接下来,夹克老爷又送出最多k组高级红包,每组高级红包会同时给一排或一列…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1099 1099 任务执行顺序 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有N个任务需要执行,第i个任务计算时占R[i]个空间,而后会释放一部分,最后储存计算结果需要占据O[i]个空间(O[i] < R[i]). 例如:执行需要5个空间,最后储存需要2个空间.给出N个任务执行和存储所需的空间,问执行所有任务最少需要多少…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活动安排问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?  Input 第一行一个正整数n (n <= 10000)代表活动的个数. 第二行到第(n + 1)行包含n个开始时间…
Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ————— 序号  单词 —————  1  2 …… n-2 n-1  n —————   然后凤老师告诉 Lweb ,我知道你要学习的单词总共有 n 个,现在我们从上往下完成计划表,对于一个序号为 x  的单词(序号 1...x-1 都已经被填入): 1) 如果存在一个单词是它…
传送门 解题思路 \(trie\)的一个比较经典的应用,首先把每个点到根的异或和算出,然后建一棵\(trie\)把所有权值插入到\(Trie\)中,之后枚举所有结点,在\(Trie\)上贪心的跑统计答案,时间复杂度\(O(nlogn)\) 代码 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=100005; inline int rd(){ in…
题目链接 \(Description\) 有一张\(n\)个点的完全图,每个点的权值为\(a_i\),两个点之间的边权为\(a_i\ xor\ a_j\).求该图的最小生成树. \(n\leq2*10^5,0\leq ai<2^{30}\). \(Solution\) 代码好神啊. 依旧是从高到低考虑每一位.对于当前位i,如果所有点在这一位都为0或1,不需要管(任何边在这一位都为0). 否则可以把点分为两个集合,即i位为0和1的集合,这两个集合间必须存在一条边,且边权这一位只能为1. 考虑怎么高…