- 博客(51)
- 收藏
- 关注
原创 HDU4576 Robot(概率dp)
HDU4576 Robot 题意 1到n形成一个环,机器人从一号点出发,给定每次走的长度,方向随机,问最后在某个区域内的概率是多少。 思路 入门级概率dp 把if(dp[id][i])这段去掉就超时了,还是得剪枝一下 代码 #include<bits/stdc++.h> using namespace std; const int maxn=210; double dp[2][...
2019-11-04 20:52:07
383
原创 2019牛客暑期多校训练营(第六场)
D Move 题意 要把n个物品放到k个盒子里,每个物品都有一个体积,每次找与这个盒子最接近的体积放进去,直到放不下,然后去放下一个盒子直到放完,求盒子最小的体积. 思路 显然这个题每个不能二分体积,然后暴力找体积范围为[ceil(sum/k),ceil(sum/k)+maxV],sum是所有物品的总体积,maxV是最大的体积,对于每个体积在按题意模拟即可. 代码 #include<...
2019-11-04 18:23:16
276
原创 HDU4585 Shaolin
HDU4585 Shaolin 题意 少林寺以武僧闻名,每年都有很多年轻人去少林寺出家。少林大师对一个年轻人的评价主要是看他对佛经的理解能力,但也要考虑他的打斗技巧。当一个年轻人通过了所有的测试并被宣布为少林新和尚时,将会有一场战斗,作为欢迎派对的一部分。每个和尚都有一个唯一的身份证和一个唯一的战斗等级,都是整数。新和尚必须与战斗等级最接近他的老和尚战斗。如果有两个老和尚满足这一条件,新和尚将采...
2019-11-04 18:15:12
355
原创 2014-2015 ACM-ICPC, Asia Xian Regional Contest F Color
2014-2015 ACM-ICPC, Asia Xian Regional Contest F Color 题意 n个格子排成一行,有m种颜色,问用恰好k种颜色进行染色,使得相邻格子颜色不同的方案数。 思路 组合计数+容斥(奇加偶减) 公式为∑i=1k(−1)k−i∗C(k,i)∗(i)∗(i−1)n−1\sum_{i=1}^k(-1)^{k-i}*C(k,i)*(i)*(i-1)^{n-...
2019-10-07 21:06:45
379
原创 P2468 [SDOI2010]粟粟的书架
P2468 [SDOI2010]粟粟的书架 题意 给一个n*m的矩阵,每个位置里有一本书,每本书有一个高度,在给定的矩阵中找最少要几本书才能使高度大于等于h 思路 分情况讨论,首先对于R,C<=200: sum[i][j][k]表示对于子矩阵1-i ,1-j的子矩阵中有多少大于等于k值的和,cal[i][j][k]表示对于子矩阵1-i ,1-j的子矩阵中有多少大于等于k值的个数,然后...
2019-10-07 11:14:35
202
原创 HDU6278(2018湘潭邀请赛C题Just h-index)
HDU6278 题意 在一个区间内找一个最大的h使得大于等于h的个数也得大于等于h 思路 建立一颗主席树,然后二分找最大的h(kuangbin模板属实好用) 代码 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; int maxx=0,tot=0,root=0; int a[maxn],t[m...
2019-10-07 10:57:40
303
原创 POJ2912(种类并查集)
POJ2912 题意 n个人玩石头剪刀布的游戏,其中有一个人是裁判,要求将这些人分成三组,这三组可以为空,然后如果裁判为1个输出裁判为第几个人,在多少行就判断出来,如果裁判可能有多个,就输出"Can not determine",没有就输出"Impossible". 思路 种类并查集(雾),我之前都做的是扩展域并查集,然而我是看完题解才懂的,并查集貌似是满足以下图片的关系,图片参考的博客 ...
2019-10-03 17:51:13
438
1
原创 POJ1733Parity game
POJ1733Parity game 题意 区间长度为n,给定m个关系,然后三个输入l,r,s(字符) ,如果s="even"表示(l,r) 有偶数个1,如果s="odd"表示(l,r) 有奇数个1,求k使得1-k个条件都能满足要求,而k+1个条件不能满足. 思路 边带权并查集,记录与父亲节点之间有偶数个1还是奇数个1,当权值为1时时偶数个1,当权值为0时为偶数个1. 代码 #includ...
2019-10-02 20:27:14
216
原创 P1525 关押罪犯
P1525 关押罪犯 题意 略(中文) 思路 扩展域并查集(当然二分图也可以做),开二倍数组,(1,n)记录关在同一个监狱里,(n+1,2*n)记录与自己不同监狱的,因为还有怨气值,所以怨气值要从大到小排序,保证怨气值大的不在一块,这样就能使怨气值最大的最小,然后依次判断就行了. 代码 #include<bits/stdc++.h> using namespace std; c...
2019-10-02 20:17:36
205
原创 P1196 [NOI2002]银河英雄传说
P1196 [NOI2002]银河英雄传说 题意 略(中文) 思路 边带权并查集,用front[i]记录i到根节点之间有多少艘战舰,num[i]表示第i列有多少艘战舰. 代码 #include<bits/stdc++.h> using namespace std; const int maxn=3e4+10; int num[maxn],front[maxn],fa[maxn]...
2019-10-02 19:57:47
206
原创 P2024 [NOI2001]食物链
P2024 [NOI2001]食物链 题意 略(中文) 思路 一道典型的扩展域并查集,我们开三倍数组,(1,n)记录同类域,(n+1,2n)记录捕食域,(2n+1,3*n)记录天敌域,分析各个域的关系,当x,y为同类时x的捕食域肯定不能是y,y的捕食域肯定不能是x,当x,y为捕食关系时(x吃y),此时x和y不能在同类域中,y的捕食域不能是x. 代码 #include<bits/std...
2019-10-02 19:52:58
245
原创 P1197 [JSOI2008]星球大战
P1197 [JSOI2008]星球大战 题意 略(中文) 思路 一道思维并查集题,正着摧毁貌似不是很行,那就倒着修建,预处理按修建的顺序排序然后用并查集记录连通块个数就行了. 代码 #include<bits/stdc++.h> using namespace std; const int maxn=4e5+10; struct node{ int x,y,id; ...
2019-10-02 19:43:07
139
原创 P1955 [NOI2015]程序自动分析
P1955 [NOI2015]程序自动分析 题意 略(中文) 思路 并查集加离散化就OK了 代码 #include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; int fa[maxn]; struct node{ int a,b,op; bool operator <(const n...
2019-10-02 19:36:58
308
原创 2019CCPC秦皇岛题解
HDU6734 签到题 HDU6740 题意 a×循环节已经开始出现的部分长度−b×循环节长度a\times循环节已经开始出现的部分长度-b\times循环节长度a×循环节已经开始出现的部分长度−b×循环节长度 思路 将小数 点后的字符串倒过来求一次next,然后循环节出现的部分长度为i,循环节长度为i-next[i]. 代码 #include<bits/stdc++.h> u...
2019-09-29 13:31:39
1644
原创 状态压缩(TSP问题)
POJ5067 题意 有一个n*m的矩阵上存在一些石头,接下来要从起点出发把这些石头拿上并回到起点,问最小需要多少步。 思路 用sum表示除了(1,1)这个点外其他有石头的点的个数,用x数组和y数组表示这些点的坐标的位置,在这里我用二进制下的每个位置表示点的位置,将最后的位置来表示起点,0 - n-1分别表示其他点的位置,然后开始暴力枚举二进制下的每个数字,注意初始化dp[0] [n]=0...
2019-09-24 10:40:30
665
1
原创 HDU2825
HDU2825 题意 求长度为n且至少包含k个给定子串的种类数. 思路 AC自动机+状压dp. 对end[]节点标记数组进行改动,用二进制下第几位表示即为包含第几个给定子串.dp转移方程为 dp[i+1][nex][k|end[nex]]=(dp[i+1][nex][k|end[nex]]+dp[i][j][k])%mod 第一维表示长度,第二维表示到达哪个节点第三维表示用了哪几个给定子串....
2019-09-24 10:37:20
315
原创 HDU2243
HDU2243 题意 求长度为m且包含1-n个子串的种类数. 思路 首先计算26+262+....+26m26+26^2+....+26^m26+262+....+26m,构造矩阵为 [sum(m+1)1]=[sum(m)(初始sum(1)=26)1]∗[260261] \left[ \begin{matrix} sum(m+1) & 1 \end{matrix} \...
2019-09-23 15:31:46
480
原创 poj2778(ac自动机+矩阵快速幂)
HDU2778 题意 求长度为m且不包含n个子串的种类数. 思路 参考自这个博客. ac自动机+矩阵快速幂. 这儿有个结论. 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j), 实际上就等于从点i到点j恰好经过2条边的路径...
2019-09-22 13:33:13
444
原创 HDU2896 HDU3065(AC自动机)
HDU2896 题意 求目标串中出现了几个给定的子串. 思路 ac自动机模板题(). 代码 #include<bits/stdc++.h> using namespace std; struct Trie { int next[105010][130],fail[105010],end[105010]; int root,L; int newnode()...
2019-09-20 21:15:02
167
原创 HDU2222
HDU2222 题意 求目标串中出现了几个模式串. 思路 ac自动机模板题. 代码 #include<bits/stdc++.h> using namespace std; struct Trie{ int next[500010][26],fail[500010],end[500010]; int root,L; int newnode(){ ...
2019-09-19 21:37:49
155
原创 POJ3974(字符串hash和马拉车算法)
POJ3974 题意 求给定字符串的最长回文子串的长度. 思路 马拉车算法或者字符串hash 代码 马拉车算法 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=2e6+10; char Ma[maxn]; int Mp[m...
2019-09-13 15:00:43
402
原创 2019徐州网络赛I
2019徐州网络赛I 题意 给1个长度为n的数组p,然后给出m次区间询问,求满足区间内满足min(pi,pj)=gcd(pi,pj)min(p_i,p_j)=gcd(p_i,p_j)min(pi,pj)=gcd(pi,pj)的对数. 思路 由min(pi,pj)=gcd(pi,pj)min(p_i,p_j)=gcd(p_i,p_j)min(pi,pj)=gcd(pi,pj)可...
2019-09-10 21:11:31
321
原创 2019徐州网络赛G
2019徐州网络赛G 题意 给定s字符串,定义一个回文串的价值是这个回文串中不同字母的个数,求s中所有回文串的价值之和. 思路 马拉车加序列自动机. 代码 #include<bits/stdc++.h> using namespace std; const int maxn=610010; char Ma[maxn]; int Mp[maxn]; int Next[maxn][...
2019-09-10 18:19:25
311
原创 2019徐州网络赛E
2019徐州网络赛E 题意 给n,m,和长度为n的数组w,找最右边的j使得w[j]>=w[i]+m,输出中间的间隔的数的个数,如果没有输出-1. 思路 比赛时想到线段树贪心找右区间,找不到返回-1.(题解时单调队列做法). 代码 #include<bits/stdc++.h> using namespace std; const int maxn=5e5+10; int ...
2019-09-09 20:57:01
172
原创 2019徐州网络赛A(EXCRT)
2019徐州网络赛A 题意 给出k个a,b,求出n=b(mod a)求出n,然后斐波那契博弈 思路 板子题 excrt求出n然后斐波那契博弈(我只想保存一下板子,我的爆ll?). 代码 #include <iostream> #include <map> #define ll long long using namespace std; const int maxn...
2019-09-09 20:00:12
211
原创 2019牛客暑期多校第十场F
2019牛客暑期多校第十场F 题意 在二维平面内有n个气球,选择一个三条等间距的横线和竖线,问能最大打破多少个气球. 思路 枚举x坐标,用线段树维护y坐标(去重). 代码 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; int tree[maxn<<2]; void build(...
2019-09-09 16:46:07
167
原创 hdu6681(线段树)
hdu6681 题意 在n*m的平面上有k条射线,问把这个平面切成多少块? 思路 预处理一下,按x左边排序,type=1表示开始的位置,type=2表示结束的位置,用线段树维护y轴,单点更新,区间查询. 代码 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; int tree[maxn<...
2019-09-07 18:19:36
266
原创 P1908 逆序对
链接:P1908 逆序对 代码: #include<bits/stdc++.h> using namespace std; #define lowbits(x) x&(-x) const int maxn=5e5+10; int n; int a[maxn]; int b[maxn]; int c[maxn]; void add(int x,int y){ for(;...
2019-04-02 16:59:01
184
原创 hdu5950 Recursive sequence题解
链接:hdu5950 Recursive sequence **题意:**f[1]=a,f[2]=b,f[i]=f[i-1]+2*f[i-2]+i^4(I&amp;gt;=3),求f[n]%mod 。 思路: 矩阵快速幂 首先构造矩阵,如下: 然后直接写代码就行了。 代码: #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&a
2019-03-06 15:51:02
302
原创 数论问题之质数
质数定义 若一个正整数无法被1和它自身之外的任何自然数整除,则称该数为质数(素数),否则该数为合数。 质数的判定用试除法: bool is_prime(int n){ if(n&lt;2) return false; for(int i=2;i&lt;=sqrt(n);i++){ if(n%i==0) return false; } return true; } 质数的筛选方法:...
2019-02-10 18:07:53
668
原创 Dijkstra算法
Dijkstra算法是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 算法流程: 1.初始化vis[1-n]为0和d数组初始化为无穷大,d[1]=0。 2.然后从1-n中找出一个未被标记且d[x]最小的节点x,然后标记x为已经标记x,vis[x]=1. 3.扫描x的所有出边,然后更新d数组,d[j]=mi...
2019-02-03 12:19:05
229
原创 快速幂取模,快速乘取模
首先得知道余数有如下性质: (a+b)%m == (a%m+b%m)%m a*b%c=((a%c)*b)%c ab%c=(a%c)*b%c a^p=aa…*a=(a%p) *(a%p) * … *(a%p) 代码: #include&amp;amp;lt;bits/stdc++.h&amp;amp;gt; using namespace std; #define LL long long LL quickMod(LL a,...
2019-01-23 12:01:39
349
原创 欧拉函数
欧拉函数: 对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。 n可以写成若干 若n是质数p的k次幂(如(2)式),可以表示如上图所示。 欧拉函数是积性函数,即是说若m,n互质,可以写成如下图所示: 于是可以根据(3)式写出代码如下: #include&amp;amp;lt;bits/stdc++.h&amp;amp;gt; using namespace std; int Phi(int n){ i...
2019-01-23 11:23:24
442
1
原创 Codeforces Round #530 (Div. 2)C. Postcard
一道模拟题。 题意: 给你一段字符串,然后里面有俩中特殊符号‘ ? ’和’ * ‘ ,’ ? '可以删除或者留下前面的字符,‘ * ’可以删除,留下或者重复(很多次)前面的字符。 思路: 我们可以先删除特殊字符以及特殊字符前面一个字符(此处判断k与剩下字符的个数,如果他比全删除之后的字符个数还小那就不可能或者当“*”数量为0时又大于他所有没删除字符的个数也不可能),然后判断需不需要加上,如果遇到’...
2019-01-17 15:09:12
203
原创 Educational Codeforces Round 58 (Rated for Div. 2) C. Division and Union
Educational Codeforces Round 58 (Rated for Div. 2) C. Division and Union 题意: 将所给的分段分成俩个非空集合,使得一个集合中的任何一个分段与另一个集合中的任何一个分段不相交。 思路: 应该让r从大到小排序(记录他们原先的位置),然后判断前一个的r和后一个l,如果r&lt;l,则说明他们不相交,如果l&lt;=r,则说明他们相...
2019-01-15 13:07:53
285
原创 牛客练习赛37 C题筱玛的迷阵探险
牛客练习赛37 C题筱玛的迷阵探险 二分dfs,找出对角线上对应的每个可能结果,开俩个数组,分别存在俩个数组中,一个插入到字典树中,另一个查找和它异或最大的数。 #include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; int Map[24][24]; const int maxn=1e5+10; int ch[32*maxn][2]; int val...
2019-01-14 17:31:05
495
原创 prim算法
普里姆(prim)算法是一种用来查找最小生成树的算法。 流程如下: 1.先存图,存边(用邻接矩阵将出入点和边权存起来)。 2.然后选定一个起点加入边集(比如从1开始)。 3.然后以边集里面的为起点寻找最小的边权,然后将终点加入到边集里。 4.重复步骤三,知道找到最小生成树。 5.最后将所有边集加起来。 如下图所示: #include&lt;bits/stdc++.h&gt; using name...
2019-01-09 20:57:02
364
原创 克鲁斯克尔算法
Kruskal算法是一种用来查找最小生成树的算法。 流程如下: 1.首先建图,存边(创建结构体包含出边,入边以及边权. 2.然后对边权进行排序(每次从中选取最小边加入到新图中. 3.建立并查集,初始化每个点构成一个集合。 4.然后对排序好的边权进行扫描,如果俩个点不在同一个集合中,加入到新图中,如果俩个边在同一个集合中,则继续扫描下一个边。 如下图所示: #include<bits/std...
2019-01-09 11:07:40
863
原创 矩阵快速幂(求斐波那契数列)
因为Fib(n)至于最近的俩个序列有关(及Fib(n-1)和Fib(n-2)),所以我们保存最近的那俩个就行了。 设f(n)表示一个1*2的矩阵,f(n)=[Fib(n),Fib(n+1)],可以看成【a,b】–>【a+b,b】; 所以可以变成f(n)=f(n-1)*A; (A表示一个二维矩阵) A[2][2]={{0,1},{1,1}};然后就可以得到最终的表达式 f(n)={0,1}*...
2019-01-05 19:09:16
4564
原创 树形dp(poj 2342 Anniversary party)
poj 2342 Anniversary party 简单的树形dp入门题 解题思路: 每个节点都可以当成一个决策,可以来或者不来,这样一来先找树根节点,然后用dfs从根节点从头开始遍历到叶子节点,判断来还是不来,然后回溯到根节点。 dp[i][1]表示来,dp[i][0]表示不来; 因此有 当i的父节点不来时dp[node][0]+=max(dp[i][0],dp[i][1]) 当i的父节点来时...
2019-01-04 10:54:25
194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅