题意:一个n个点的完全图,点带权,边权是两端点点权的异或值.问你最小生成树. 一个性质,把所有点按照二进制最高位是否为1划分为2个集合,那么这两个集合间只会有一条边.可以递归处理. 把所有点建成01Trie,发现两个集合就是Trie的每个结点的两个子树.用启发式的思想,在小子树里dfs到叶子结点,取出每个值,然后去大子树里查询即可. O(n(logn)^2). #include<cstdio> #include<algorithm> using namespace std; typ…
题意:F(n)为斐波那契数列的第n项,问你F(F(n)) mod 20160519的值. 发现有循环节,F(26880696)=0,F(26880697)=1,.... 于是两次矩乘快速幂即可. #include<cstdio> #include<vector> using namespace std; typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; mat mul…
平面上n个点,两个人交替决策,用线段连接两个点,但不能跨越其他点或者已经存在的线段.不能做的人算输,问你谁赢. 实际上,跟两个人的决策无关,n个点将平面三角剖分,只需要算出有几条边即可. 凸包上如果有K个点,那么图中那K-1条实边每条贡献一个三角形. 凸包内其他的边,每条贡献2个三角形.除了最中心那一个贡献一个. 假设总的三角形数是X,那么总的线段数就是(X*3+K)/2. 线段数是奇数就先手胜,否则后手胜. #include<cstdio> #include<algorithm>…
给你一个字符串,多次区间询问,问你在该区间内最多能有几个easy重复的子序列. 显然如果只有一次询问,从左到右贪心做即可. 分块,预处理任意两块间的答案,不过要把以e a s y开头的四个答案都处理出来.① 然后再预处理每个点到该点所在块右端点的答案,不过只用考虑e开头的.② 询问的时候,分成三部分,l到r[num[l]]直接得到②部分的答案,中间部分直接得到①的答案,右侧再贪心跑一下就行了. #include<cstdio> #include<cstring> #include&…
题面: Problem I. Increasing or DecreasingInput file: standard inputOutput file: standard outputTime limit: 2 secondsMemory limit: 512 mebibytesWe all like monotonic things, and solved many problems about that like Longest Increasing Subsequence(LIS). H…
2016弱校联盟十一专场10.5 传送门 A. As Easy As Possible 假设固定左端点,那么每次都是贪心的匹配\(easy\)这个单词. 从\(l\)开始匹配的单词,将\(y\)的位置标记成有效位置,用主席树维护. 如果\(s_l\ne e\),那么\(l\)与\(l+1\)的匹配结果一致:否则从\(l\)开始匹配到某个位置\(p\)完成单词匹配,我们从\(p+1\)的有效位置继承过来,然后再将\(p\)标记成有效位置即可. B. Be Friends 在二进制下,从高位开始考虑…
参考博客: https://www.luogu.org/problemnew/solution/P3294 https://blog.csdn.net/VictoryCzt/article/details/87186287 [题意] 题意如果看不懂,请到第二个链接去推一推事例,你就明白这个过程了. 来自题解中glf大佬的解析. 这题目描述真是令人窒息. 3个条件的意思大概是这样: (1).如果有单词作为现在正在填入的单词的后缀但并未填入,将花费n*n的代价. (2).如果没有单词作为当前填入单词…
[题目链接]: https://loj.ac/problem/10053 [题意]: 给出n个模式串.请问文本串是由多少个模式串组成的. [题解]: 当我学完AC自动机后,发现这个题目也太简单了吧. 不过当时我还是不会,后来看了看洛谷有位大佬的题解. 简直醍醐灌顶.纯Trie树也能写出这个题来. 就是把对应的位置标记上,好比dp的转移. 这个转移是,开一个Mark数组,看看文本串中哪个位置能通过这些模式串匹配出来的. 然后一直转移即可. [代码]: //L语言 #include<cstdio>…
[参考博客]: LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie [题目链接]: https://loj.ac/problem/10051 [题意]: 找出两个不相交区间的异或值相加. [题解]: 这个题目还是挺有趣的,不是单纯地套模板了. 这个题目类似于 最大字段和问题. 首先我们可以预处理出所有的异或前缀和. 区间的异或值,就是两端点异或前缀和的异或值. 还需要处理出 L[t] = max{ Xor[i,j] }  1<= i,j <= t R[t] = m…
[题目链接]: https://loj.ac/problem/10049 [题意] 问是否存在一组公共前缀.如果存在输出“NO”,否则输出“YES” [题解] 首先建出Trie树来,然后开始记录所有的字符串,然后进行再跑一遍.看看是否在跑的过程中遇到某个位置上标记. 裸的模板题. [代码] #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ][]; ],f; int T,n,idx; ]; void Ins…
[题目链接]: https://loj.ac/problem/10056 [题意] 请输出树上两个点的异或路径  的最大值. [题解] 这个题目,y总说过怎么做之后,简直就是醍醐灌顶了. 我们知道Xor路径,我们从根结点处理所有结点的  到根结点的异或和,我们想要两个点的异或路径. 其实就是利用根结点  到两个点  异或和 .因为LCA到根结点异或了两遍,所以答案就保留了异或路径的部分. 其实这个题目就是Xor——pair的变种. 处理从根结点出发的所有结点的位置的异或值. [代码] #incl…
[题目链接]: https://loj.ac/problem/10054 [题意] 我认为这个题目最难的是题意: 其实分了两种情况: 1.如果当前文本串匹配不完,那么答案的是:匹配过程中遇到的模式串结尾的个数 + 文本串结尾 的节点 ,模式串的经过该点的个数. 2.如果是文本串中途遇到问题,而不能继续匹配的情况是:匹配过程中遇到的模式串结尾的个数 只要分开这两种情况即可. [代码]: #include<cstdio> #include<cstring> #include<al…
[题目链接]: https://loj.ac/problem/10052 [题意]: 就是给一些串,是否存在两个串是相同前缀的. [题解] 模板题,不想解释了. [代码]: #include<cstdio> #include<cstring> #include<algorithm> using namespace std ; typedef long long ll; const int N = 1e4; ]; ]; int n,idx; bool f,cnt[N];…
[题目链接] https://loj.ac/problem/10050 [题意] 给出n个数,其中取出两个数来,让其异或值最大. [题解] 经典的01字典树问题. 首先需要把01字典树建出来. 然后对于每一个串都跑一遍.如果存在当前位 不同的 节点,就往那里跑,否则顺着跑. 一切尽在代码中. [代码] #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ; ]; int a[N],n,idx; void In…
题目大意: hat's word 的定义是字典中 恰好由另外两个单词连接起来的单词 给你一本字典,问有多少个hat's word,(字典按字典序给出) 单词数50000.. 初步思路: 单词分为前缀单词,后缀单词 前缀单词出现在字典的前面,后缀单词出现在字典后面? 1.枚举前缀,哈希判断后缀? 复杂度:N^N*单词平均长度,显然不靠谱 2.trie树? 先建树,然后对于每一个单词读入,如果经过了某些单词结尾,判断一下后缀有没有. 复杂度似乎可靠?写写吧.... 代码写成功..样例过..RE..字…
摘自hackbuteer1 Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高. Trie的核心思想是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的. Trie 的强大之处就在于它的时间复杂度.它的插入和查询时间复杂度都为 O(k) ,其中 k 为 key 的长度,与 Trie 中保存了多少个…
Finding Palindromes Time Limit: 10000MS   Memory Limit: 262144K Total Submissions:4710   Accepted: 879 Case Time Limit: 2000MS Description A word is called a palindrome if we read from right to left is as same as we read from left to right. For examp…
题意: 给你一个空的可重集,支持以下操作: 向其中塞进一个数x(不超过100000), 询问(x,K,s):如果K不能整除x,直接输出-1.否则,问你可重集中所有是K的倍数的数之中,小于等于s-x,并且与x异或结果最大的数是多少(如果不存在这样的数,也输出-1). 建立100000个二进制Trie,第i个Trie中存储i的所有倍数. 查询的时候,在Trie上从高位到低位贪心地找,如果从根到当前点的路径形成的数恰好与s-x相等,要从当前点进行一次dfs统计,看看当前子树中是否存在不超过s-x的数,…
看到题目一开始想到的是一道求子集和的异或和,可以用$bitset$实现求子集和.然而这道题如果要强算子集和肯定是带不动的,况且还要算方案,所以尝试去找题目中的性质. 看到整除,很容易想到如果是一段区间,区间的头和尾的前缀和模后余数是一样的,那么这段区间(左开右闭)一定是满足整除的一段区间.而这道题目中,我们发现模数$n$很特殊,是这个序列的长度.继续深入思考. 这个序列一共有$n$个前缀和,而模$n$取余数一共有$n$个,其中如果余数是0那么便是符合条件的答案了,所以如果0,剩下$n-1$个余数…
题意:2种操作:①往集合里添加一个串 ②给你四个小串a b c d,问你集合里有几个串S满足S=a+S1+b+c+S2+d的形式.S1 S2可以为空,并且a+S1+b=c+S2+d. 就搞四颗Trie出来,分别存的是 所有S的前半部分 + 所有a串: 所有S的前半部分倒置 + 所有b串倒置: 所有S的后半部分 + 所有c串: 所有S的后半部分倒置 + 所有d串倒置. 这样把问题转化成了询问有几个S串同时在四个串所限制的子树里,用dfs序处理. 另外,由于ab不能交叠,cd不能交叠,所以串的长度要…
枚举每个文章里已经在Trie中被标记为可能是分割处的字符,然后再从此处跑Trie,继续向后标记.由于单词数很少,因此复杂度可以接受,O(n*m*Len). #include<cstdio> #include<cstring> using namespace std; int n,m,L; char s[1024*1024+100]; int ch[21*11][26]; bool is[21*11],end[1024*1024+100]; int sz; void Insert(c…
正题 题目链接:https://www.luogu.com.cn/problem/P7717 题目大意 求有多少个长度为\(n\)的序列\(a\)满足,都在\([0,k]\)的范围内且满足\(m\)个限制刑如:\(a_x\ xor\ a_y=z\) \(0\leq n,m\leq 5\times 10^5,0\leq k<2^{30}\) 解题思路 首先假设有合法方案,那么对于一个位置\(a_x\)确定之后与它直接或间接限制的\(a_y\)都将被确定. 我们可以设限制为一条边,然后先\(dfs\…
评选三份作品,请发关于app运行界面截图的博客.…
这样类似的题目不少,很多都是一堆优化条件求最优解,这个题的策略就是二分+贪心.对时间二分, 对费用采用贪心. /* 377B */ #include <iostream> #include <string> #include <map> #include <queue> #include <set> #include <stack> #include <vector> #include <deque> #inc…
传送门 题意要你构造一个序列,使得该序列的每个位置上的最长上升子序列的长度能构成给定的序列. 构造序列的元素要求还要求满足给定的上下界 solution 我们可以把给出的最长上升子序列的长度按升序排列,长度相同的按下标降序排列. 排完序后第一个数可以贪心的取其下界,同一层(即长度相同)的下标小的取值应该大于等于下标较大的取值 同时取值应该大于前一层下标最大且小于该位置的数 #define IN_LB() freopen("F:\\in.txt","r",stdin)…
[KMP] 学习KMP,我们先要知道KMP是干什么的. KMP?KMPLAYER?看**? 正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .- 啊跑题了. KMP就是给出一个母串S和串T,然后看T是不是S的子串. 易想到朴素算法,且时间复杂度是明显的O(NM). 那么为什么KMP的复杂度会这么高呢? 因为每次失配的时候,指针只是简单的把在S串的指针向后移动一位,T串回到开头,其中对于子串T已匹配过的信息没有充分利用. KMP是干嘛的? 利用一个next数组使得失配时T…
[Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com 一.基础知识 1.Android 进程优先级 1.1 进程优先级等级一般分法:- Activte process- Visible Process- Service process- Background process- Empty process 1…
[awesome-dotnet-core-learning](1)-Sprache-解析器构建库 关于awesome-dotnet-core-learning .NET Core从2016年发布1.0以来,至今已经3岁了,可以说现在的.NET Core的生态已经相当完善了,可满足各行业的生产要求.如果你还在怀疑.NET Core的实用性质,是时候转变想法了. 在GITHUB上有一个项目:awesome-dotnet-core.专门罗列了各种.NET Core优秀的开源库,该列表几乎每天都在增长,…
[1]Two Sum (2018年11月9日,k-sum专题,算法群衍生题) 给了一个数组 nums, 和一个 target 数字,要求返回一个下标的 pair, 使得这两个元素相加等于 target . 题解:我这次最大范围的优化代码, hash-table + one pass,时间复杂度 O(N),空间复杂度 O(N).重点在于动态找,一边生成hash-table的同时去找答案,不是先生成hash-table再开始找答案. //这种类似 hash 的能用 unordered_map 就不要…
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并查集======================================[HDU]1213   How Many Tables   基础并查集★1272   小希的迷宫   基础并查集★1325&&poj1308  Is It A Tree?   基础并查集★1856   More i…