自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

肘子的博客

向流星许愿

  • 博客(33)
  • 收藏
  • 关注

原创 洛谷P2679 子串(线性DP)

题意:传送门题解:从aaa中选取kkk个连续的子串按顺序拼成bbb串,有多少种方案???考虑这样表示f[i][j][k]f[i][j][k]f[i][j][k]到达aaa的第iii位,此时已经取了jjj个和bbb的前jjj个相同,一共用了kkk个连续串,但是有个问题,就是下一位该怎么推,这个iii位到底选了没有选,这样不好推,考虑再加上一维f[i][j][k][0/1]f[i][j][k][0...

2019-08-14 11:13:31 194

原创 洛谷P1072 Hankson 的趣味题(约数的√n/log(n)求法\gcd,lcm本质问题)

题意:传送门题解:本题让求gcd(a,x)=c并且lcm(b,x)=d的x的个数gcd(a,x)=c并且lcm(b,x)=d的x的个数gcd(a,x)=c并且lcm(b,x)=d的x的个数,首先可以知道的xxx一定是ddd的约数,于是使用朴素算法的话,用试除法求出ddd的所有约数,再判断下其余的两个条件,复杂度为d+2∗log(d)\sqrt{d}+2*log(d)d​+2∗log(d),总复杂...

2019-08-13 17:25:06 268

原创 Remmarguts' Date POJ - 2449(K短路问题+A*)

题意:传送门题解:K短路问题,以前只会套板子,现如今感觉了解了更多了,首先最基本的dijkstradijkstradijkstra算法,如果某个队头从优先队列中取出时,证明它此时是从起始点到它的最短路,那么如果我们不加入那些限制,遇到就加入队列,如果某个节点第iii次从队头中取出时,就证明此时的距离是从开头到这个点的第iii短路了,然后再想下从S−>TS->TS−&g...

2019-08-13 00:07:22 179

原创 Nightmare Ⅱ HDU - 3085(双向bfs)

题意:传送门题解:建立两个队列,每个时间下,每一轮中,先判下是否能走,之后男孩bfsbfsbfs三层,女孩bfsbfsbfs一层,记录可达性。中间位置的特判注意:每次先判鬼是否能到达,不是人先走。#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>using namespace s...

2019-08-12 11:16:23 164

原创 Full Tank? POJ - 3635(dijkstra)

题意:传送门题解:考虑每个状态,当前所在城市和所剩余的油量,起始状态为(s,0)(s,0)(s,0),拓展到新的状态有(city,fuel+1)(city,fuel+1)(city,fuel+1),表示在该城市再添加一升油,第二种就是油量足够跑到下一个点上,就转化成一个最短路问题了。code:code:code:#include<iostream>#include<cst...

2019-08-12 10:03:10 297

原创 Bloxorz I POJ - 3322(广度优先搜索)

题意:传送门对应游戏:传送门题解:对于这个木块,可以发现有三个状态,第一个状态是直立的,第二个状态是横躺着,第三个状态是竖躺着,那么状态维护三个值x,y,liex,y,liex,y,lie,分别对应位置以及状态,最后在维护dist[x][y][lie]dist[x][y][lie]dist[x][y][lie]表示到达这个位置且是lielielie这种状态的最小步数,维护好各种边界条件即可。...

2019-08-11 18:20:12 226

原创 背包问题的物品数少容量大的问题(折半搜索+优化搜索顺序)

题意:给了m,nm,nm,n,其中m≤231−1,n≤45m\le 2^{31}-1,n\le 45m≤231−1,n≤45,给出了nnn个物品,问最后在容量为mmm的情况下最多能装多少东西?题解:01背包的解法是O(nv)O(nv)O(nv)的,但是nnn却很小,如果直接搜索2452^{45}245也会TTT,那么可以先搜索一半,然后把这一半的重量存下来,之后再枚举另一半,然后通过二分搜索前面...

2019-08-11 16:53:01 715

原创 Addition Chains POJ - 2248(迭代加深搜索)

题意:传送门题解:对于这个题需要找出符合长度最小的长度,对于100100100这个数而言,1+2+4+6+10+16+26+42&gt;1001+2+4+6+10+16+26+42&gt;1001+2+4+6+10+16+26+42>100,所以有答案的情况大概在101010以内就存在了,可以直接使用迭代加深搜索,当到达某个深度搜到了答案时就是最短长度了,当然对于每个搜索内...

2019-08-11 15:51:57 194

原创 生日蛋糕 POJ - 1190(优化搜索顺序+可行性剪枝+最优性剪枝)

题意:传送门题解:从下往上搜索,枚举每层的半径和高度。整个蛋糕的表面积之和等于最下面蛋糕的上表面和所有蛋糕的侧面积,体积就是r∗r∗hr*r*hr∗r∗h。上下界剪枝:在第depdepdep层时,首先枚举rrr,因为r2r^2r2所占比例大于hhh,总是优先枚举大的,优化搜索顺序。那么第uuu层的半径和高度的范围就是:r∈[dep,min(⌊N−v⌋,R[dep+1]−1)]r\in [d...

2019-08-11 13:29:30 296

原创 BZOJ1257: [CQOI2007]余数之和(整除分块)

题意:传送门题解:k%i=k−⌊ki⌋∗ik\%i=k-\left \lfloor {\frac{k}{i}} \right \rfloor*ik%i=k−⌊ik​⌋∗i原式=n∗k−∑i=1n⌊ki⌋∗i原式=n*k-\sum_{i=1}^{n}\left \lfloor {\frac{k}{i}} \right \rfloor*i原式=n∗k−i=1∑n​⌊ik​⌋∗i对于这个⌊ki⌋\...

2019-08-11 12:01:09 146

原创 BZOJ1053: [HAOI2007]反素数ant(唯一分解定理的应用)

题意:传送门题解:首先,要考虑1 N1~N1 N中最大的反质数,就是1 N1~N1 N中约数个数最多的数中最小的一个。这点是必然的,其次,在1 N1~N1 N任何数的不同质因子都不会超过101010个,且所有质因子的指数总和都不会超过303030,最小的11个质数的乘积2∗3∗5∗7∗11∗13∗17∗19∗23∗29∗31&...

2019-08-11 09:57:42 194

原创 Prime Distance POJ - 2689(素数筛的应用)

题意:传送门题解:L,R≤231L,R\le2^{31}L,R≤231,素数筛根本打不到1e91e91e9的范围,但是区间最多只有1e61e61e6,有一个定理需要知道就是任何一个合数必定包含一个不超过n\sqrt {n}n​的质因子。可以打出500005000050000的质因数,然后枚举质数的倍数将[l,r][l,r][l,r]区间中的合数筛去,最后从质数中找出答案即可。复杂度分析:线性筛...

2019-08-10 22:01:50 226

原创 Sudoku POJ - 3074(数独+优化搜索顺序+位运算优化状态记录,检索和更新)

题意:传送门题解:首先考虑一种策略,先填上“已经能够唯一确定的位置”,然后从那些填的比较满,选项比较少的位置实施突破。这样使得搜索树的规模大大降低,其次考虑的就是在搜索状态上的记录,检索和更新上的开销(影响程序运行的“常数”时间),可以使用位运算来代替数组执行"对各个位置所填数字的记录"以及"可填性的检查与统计",这样就代替了使得27次−&gt;1次27次-&gt;1次27次−&...

2019-08-10 10:14:18 317

原创 CODEVS4228 小猫爬山(搜索树“分支”数量上的剪枝)

题意:传送门题解:nnn非常小,但是c,wc,wc,w非常大,所以只能使用搜索来做,对于当前小猫要么做到已经有的车上,要么新上一个车,所以dfsdfsdfs的状态就是两个dfs(u,cnt)dfs(u,cnt)dfs(u,cnt),uuu表示当前到了第uuu个小猫,cntcntcnt表示已经有了多少个车,可以再开一个全局变量sum[N]sum[N]sum[N]来存储车的状态,这样看上去再加个if...

2019-08-09 23:36:47 186

原创 可达性统计(拓扑排序+bitset)

题意:给定一张NNN个点MMM条边的有向无环图,分别统计从每个点出发能够到达的点的数量。范围:N,M≤30000N,M\le30000N,M≤30000题解:有向无环图就是一个DAGDAGDAG图,然后可以直接做一遍拓扑排序,从后往前倒着做合集,比如现在到了第iii个点,它的出边有j,kj,kj,k,那么就是求f[i]∣f[j]∣f[k]f[i]|f[j]|f[k]f[i]∣f[j]∣f[k]...

2019-08-09 22:54:59 232

原创 Phone List POJ - 3630(trie)

题意:传送门题解:判断一堆字符中有没有谁是谁的前缀,直接使用trietrietrie,对于每个字符串结束加个标记即可。code:code:code:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N=1e5+10;int T,n,so...

2019-08-08 21:48:37 192

原创 Milking Grid POJ - 2185(kmp判断循环节)

题意:传送门题解:首先需要了解对于一个字符串的循环节的求法,如果是完美的,也就是i%(i−Next[i])==0i\%(i-Next[i])==0i%(i−Next[i])==0的情况,那么最小的循环节就是i−Next[i]i-Next[i]i−Next[i],其他的循环节就是它的倍数了,如果是不完美的,那么最小循环节也是i−Next[i]i-Next[i]i−Next[i],只不过是之后循环节...

2019-08-08 18:25:34 196

原创 BZOJ2351Matrix(二维矩阵hash)

题解:二维矩阵hash,在大的矩阵上递推小矩阵的hash值可以从上到下逐次递推,s=s∗p[B]−h[j−A]∗p[A∗B]s=s*p[B]-h[j-A]*p[A*B]s=s∗p[B]−h[j−A]∗p[A∗B],将hash值放入unordered_set中即可快速查找。#include<bits/stdc++.h>#define ull unsigned long longus...

2019-08-07 22:50:59 244

原创 P1155 双栈排序(二分图+栈)

题意:传送门题解:首先考虑样例怎么做1,3,2,41, 3, 2, 41,3,2,4,先把111压入栈111,然后弹出,接着把333压进去,把222再压进去,把222弹出来,把333弹出来,再把444压进去,这样利用一个栈就可以实现,并且是字典序最小,那么何时需要两个栈呢?再随便搞组样例试试,222,333,111,发现什么啦,发现111弹出后,这个222按理说要比333先弹出来,但是被卡住了,...

2019-08-07 11:45:03 180

原创 BZOJ4198: [Noi2015]荷马史诗(K-叉Huffman编码)

题意:传送门题解:构造方式就是构造huffman编码,把单词的出现次数作为叶子节点的权值,求出k叉huffman树,构造方式可以添加0点,使得(n−1)%(k−1)==0(n-1)\%(k-1)==0(n−1)%(k−1)==0,最后还有个条件就是使得最长的SiSiSi尽量短,那么就是提前让深度低的构树。code:code:code:#include<bits/stdc++.h>...

2019-08-05 21:38:34 161

原创 Sequence POJ - 2442(n路合并(分组+归并)+优先队列)

题意:传送门给出m个序列,一个序列中有n个数,每次从m个序列中各取一个数构成和,最后输出前n个最小的和。题解:考虑两个序列,设为序列a和b,可以将a序列排序,那么所有的选取方式为b[0]+a[0],b[0]+a[1],b[0]+a[2],+⋯&ThinSpace;,+b[0]+a[n]b[0]+a[0],b[0]+a[1],b[0]+a[2],+\cdots,+b[0]+a[n]b[...

2019-08-05 16:40:12 207

原创 The xor-longest Path POJ - 3764(树上异或最长路径+trie)

题意:传送门题解:给出一棵树,求解树上一条路径异或和最大,首先考虑跑一个有根树,d[i]d[i]d[i]表示从iii到根的异或和,之后比如iii到jjj的路径异或和就是d[i]∧d[j]d[i]\wedge d[j]d[i]∧d[j],这点可以推算得知,从一堆数中选出两个数异或和最大,暴力O(n2)O(n^2)O(n2),但是如果优化下,从第313131位开始想,如果为111,那么从剩下数中看...

2019-08-05 13:57:16 190

原创 (啊哈!算法)(第二章)链表

//链表的创建与插入值#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;struct node{//定义链表节点 int data; struct node *next;};int main(){ struct node *head,*q,...

2019-08-03 21:34:54 383

原创 马拉车算法(manacher)

马拉车算法(manacher)算法主要用于求一个字符串中最大回文子串的大小算法主要思想:首先初始化字符串,在字符串s的字符之间和尾部插入一个‘#’,如:“abba”变成“#a#b#b#a#,这样无论源字符串是奇数还是偶数都变成了奇数(此处可以试试哦),变成奇数我们就有了着脚点了,统一处理了奇偶的情况了。接下来我们得有个整形数组来存储每个位置上的字符所能达到的最大回文字串的长度(此处...

2019-08-03 21:34:29 599

原创 拓展kmp

扩展KMP:  给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0<=i<lenA),求出A[i..lenA-1]与B的最长公共前缀长度,记为extend[i](或者说,extend[i]满足A[i..i+z-1]==B[0..z-1]的最大的z值)。  设next[i]为满足B[i..i+z-1]==B[0..z-1]的...

2019-08-03 21:33:57 118

原创 区间筛法

区间[a,b)指的是所有满足a<=x<b的整数(跟据背景也可能是实数)所构成的集合。b以内的合数的最小质因数一定不超过根号b。如果有根号b以内的素数表的话,就可以把挨式筛选法运用到[a,b)上了,也就是说,先分别做好[2,根号b)的表和[a,b)的表,然后从[2,根号b)的表中筛得素数得同时,也将其倍数从[a,b)的表中划去,最后剩下的就是[a,b)的素数了。#include...

2019-08-03 21:33:40 440

原创 双向链表(结构体+指针)

首先当然得了解单向链表了传送门首先,表中的各个元素称作“结点”。双向链表的结点时结构体,有数据本体,指向前一元素的指针prev以及指向后一元素的指针next组成。这些结构体通过指针构成一个链表,就形成了双向链表。struct node{ int key; node *prev,*next;//注意不是node *prev,next};另外,在表头设置一个特殊...

2019-08-02 17:43:04 5778 4

原创 Burnside引理和Polya定理

Burnside引理:  Burnside引理是为了解决m种颜色给n个对象染色的计数问题。 【例题1】如图1所示,2×2方格中每个格子可以选择染上2种颜色(红色或白色)。那么总共是2^4=16种情况。现在要问,如果旋转0度、90度、180度、270度后状态不变的方案算成同一种方案,问总共有多少种不同的方案。将每种旋转认为是一种"置换",定义为gi,则上述问题总共有4种置换,分...

2019-08-02 17:41:30 600

原创 AVL树

本文参考:传送门首先:初始的二叉查找树只有三个节点:然后我们按照顺序陆续插入节点 4,3,2,1,0。插入之后的结构如下:这种形态的二叉查找树在查找性能上就大打折扣了,几乎变成了线性的。然后就得使用平衡二叉树了(AVL树)这是一种比查找二叉树还特别的树哦,这种树就可以帮助我们解决二叉查找树刚才的那种所有节点都倾向一边的缺点的。具有如下特性: 具有二叉查找树的全部...

2019-08-02 17:38:45 98

原创 字符串hash

题意:给出两个只由a−za-za−z组成的字符串,长度1e61e61e6,给出mmm组l1,r1,l2,r2l1,r1,l2,r2l1,r1,l2,r2,问第一个字符串中的l1−r1l1-r1l1−r1位置和第二个字符串中的l2−r2l2-r2l2−r2位置的字符串是否相等。题解:使用hashhashhash把一个任意长度的字符串映射成一个非负整数,并且其冲突概率几乎为000。取一固定值PPP,...

2019-08-02 15:21:29 110

原创 Snowflake Snow Snowflakes POJ - 3349(字符串的最小表示法)

题意:传送门题解:这个题本来是用于hash的,吴书上讲的很好,本次附上另外一中解法,用字符串的最小表示法解答:周源论文,本题中加了一种翻转操作,那么可以把不翻转和翻转的两个最小表示法再取最小,最后通过排序查找即可。code:code:code:#include<iostream>#include<cstdio>#include<cstring>#in...

2019-08-02 11:19:27 176

原创 BZOJ2457: [BeiJing2011]双端队列(双端队列性质+贪心)

题意:传送门题解:可以先考虑排好序的对应原数组下标,然后考虑分成一段一段的,那么这一段是由双端队列构成的,那么对应的原数组的下标必然是先降后升的趋势,有相同的一段,可以从头到尾贪心进行选取。code:code:code:#include<bits/stdc++.h>#define pii pair<int,int>using namespace std;inli...

2019-08-01 23:00:03 169

原创 进出栈序列问题(卡特兰数+组合数的质因数分解求法)

题意:给定1 N1~N1 N这NNN个整数和一个无限大的栈,每个数都要进栈并出栈一次。如果进栈的顺序为1,2,⋯&ThinSpace;,N1,2,\cdots,N1,2,⋯,N,那么可能的出栈序列有多少种?题解:先考虑搜索code:code:code:#include<bits/stdc++.h>using namespace std;int n;...

2019-08-01 08:53:18 547

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除