- 博客(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
269
原创 2019牛客暑期多校训练营(第六场)
D Move题意要把n个物品放到k个盒子里,每个物品都有一个体积,每次找与这个盒子最接近的体积放进去,直到放不下,然后去放下一个盒子直到放完,求盒子最小的体积.思路显然这个题每个不能二分体积,然后暴力找体积范围为[ceil(sum/k),ceil(sum/k)+maxV],sum是所有物品的总体积,maxV是最大的体积,对于每个体积在按题意模拟即可.代码#include<...
2019-11-04 18:23:16
174
原创 HDU4585 Shaolin
HDU4585 Shaolin题意少林寺以武僧闻名,每年都有很多年轻人去少林寺出家。少林大师对一个年轻人的评价主要是看他对佛经的理解能力,但也要考虑他的打斗技巧。当一个年轻人通过了所有的测试并被宣布为少林新和尚时,将会有一场战斗,作为欢迎派对的一部分。每个和尚都有一个唯一的身份证和一个唯一的战斗等级,都是整数。新和尚必须与战斗等级最接近他的老和尚战斗。如果有两个老和尚满足这一条件,新和尚将采...
2019-11-04 18:15:12
244
原创 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
256
原创 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
127
原创 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
188
原创 POJ2912(种类并查集)
POJ2912题意n个人玩石头剪刀布的游戏,其中有一个人是裁判,要求将这些人分成三组,这三组可以为空,然后如果裁判为1个输出裁判为第几个人,在多少行就判断出来,如果裁判可能有多个,就输出"Can not determine",没有就输出"Impossible".思路种类并查集(雾),我之前都做的是扩展域并查集,然而我是看完题解才懂的,并查集貌似是满足以下图片的关系,图片参考的博客...
2019-10-03 17:51:13
326
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
116
原创 P1525 关押罪犯
P1525 关押罪犯题意略(中文)思路扩展域并查集(当然二分图也可以做),开二倍数组,(1,n)记录关在同一个监狱里,(n+1,2*n)记录与自己不同监狱的,因为还有怨气值,所以怨气值要从大到小排序,保证怨气值大的不在一块,这样就能使怨气值最大的最小,然后依次判断就行了.代码#include<bits/stdc++.h>using namespace std;c...
2019-10-02 20:17:36
125
原创 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
128
原创 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
151
原创 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
90
原创 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
211
原创 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
1437
原创 状态压缩(TSP问题)
POJ5067题意 有一个n*m的矩阵上存在一些石头,接下来要从起点出发把这些石头拿上并回到起点,问最小需要多少步。思路 用sum表示除了(1,1)这个点外其他有石头的点的个数,用x数组和y数组表示这些点的坐标的位置,在这里我用二进制下的每个位置表示点的位置,将最后的位置来表示起点,0 - n-1分别表示其他点的位置,然后开始暴力枚举二进制下的每个数字,注意初始化dp[0] [n]=0...
2019-09-24 10:40:30
506
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
234
原创 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
350
原创 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
307
原创 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
102
原创 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
97
原创 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
337
原创 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
235
原创 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
221
原创 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
111
原创 2019徐州网络赛A(EXCRT)
2019徐州网络赛A题意给出k个a,b,求出n=b(mod a)求出n,然后斐波那契博弈思路板子题 excrt求出n然后斐波那契博弈(我只想保存一下板子,我的爆ll?).代码#include <iostream>#include <map>#define ll long longusing namespace std;const int maxn...
2019-09-09 20:00:12
143
原创 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
98
原创 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
175
原创 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
132
原创 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
219
原创 数论问题之质数
质数定义若一个正整数无法被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
559
原创 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
176
原创 快速幂取模,快速乘取模
首先得知道余数有如下性质:(a+b)%m == (a%m+b%m)%ma*b%c=((a%c)*b)%cab%c=(a%c)*b%ca^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 longLL quickMod(LL a,...
2019-01-23 12:01:39
275
原创 欧拉函数
欧拉函数:对正整数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
300
1
原创 Codeforces Round #530 (Div. 2)C. Postcard
一道模拟题。题意:给你一段字符串,然后里面有俩中特殊符号‘ ? ’和’ * ‘ ,’ ? '可以删除或者留下前面的字符,‘ * ’可以删除,留下或者重复(很多次)前面的字符。思路:我们可以先删除特殊字符以及特殊字符前面一个字符(此处判断k与剩下字符的个数,如果他比全删除之后的字符个数还小那就不可能或者当“*”数量为0时又大于他所有没删除字符的个数也不可能),然后判断需不需要加上,如果遇到’...
2019-01-17 15:09:12
133
原创 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
211
原创 牛客练习赛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
414
原创 prim算法
普里姆(prim)算法是一种用来查找最小生成树的算法。流程如下:1.先存图,存边(用邻接矩阵将出入点和边权存起来)。2.然后选定一个起点加入边集(比如从1开始)。3.然后以边集里面的为起点寻找最小的边权,然后将终点加入到边集里。4.重复步骤三,知道找到最小生成树。5.最后将所有边集加起来。如下图所示:#include&lt;bits/stdc++.h&gt;using name...
2019-01-09 20:57:02
251
原创 克鲁斯克尔算法
Kruskal算法是一种用来查找最小生成树的算法。流程如下:1.首先建图,存边(创建结构体包含出边,入边以及边权.2.然后对边权进行排序(每次从中选取最小边加入到新图中.3.建立并查集,初始化每个点构成一个集合。4.然后对排序好的边权进行扫描,如果俩个点不在同一个集合中,加入到新图中,如果俩个边在同一个集合中,则继续扫描下一个边。如下图所示:#include<bits/std...
2019-01-09 11:07:40
701
原创 矩阵快速幂(求斐波那契数列)
因为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
4329
原创 树形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
121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人