
acm
文章平均质量分 60
嘿嘿不错
这个作者很懒,什么都没留下…
展开
-
矩阵快速幂
struct Matrix { double mat[2][2];};Matrix mul(Matrix a, Matrix b) { Matrix ret; for(int i = 0; i < 2; ++i) { for(int j = 0; j < 2; ++j) { ret.mat[i][j] = 0;原创 2016-11-02 18:58:51 · 317 阅读 · 0 评论 -
c++大数类
#include #include #include #include #define LL long long#define INF 0x3f3f3f3fusing namespace std;const int M = 1e3+10;const int MAXN = 9;class BigNum { public: int a[M],len,sign原创 2016-11-02 12:10:55 · 596 阅读 · 0 评论 -
划分树模板
#include #include #include #include using namespace std;const int MAXN = 1e5+10;int a[MAXN],sorted[MAXN];struct Trie{ int num[20][MAXN];//进入左区间的数量 int val[20][MAXN];//记录第i层元素序列 voi原创 2016-08-20 15:31:42 · 322 阅读 · 0 评论 -
POJ 3693 Maximum repetition substring后缀数组加上RMQ
题意:求重复次数最多的连续重复子串,并且要求字典序最小的.//别人的分析分析:容易想到的就是枚举长度为L,然后看长度为L的字符串最多连续出现几次。长度为L的串重复出现,那么st[0],st[l],st[2*l]……st[k*l]中肯定有两个连续的出现在字符串中。不然肯定长度不超过2*L啊。那么我们就枚举连续的两个,然后从这两个字符前后匹配,看最多能匹配多远。即以st[i*l],原创 2016-08-20 10:00:07 · 376 阅读 · 0 评论 -
二维树状数组
#include #include #include #include #include #define LL long longusing namespace std;const int MAXN = 1e3+10;int dp[MAXN][MAXN];int lowbit(int k){return k&-k;}void updata(int n,int x,int y,i原创 2016-08-19 10:56:27 · 322 阅读 · 0 评论 -
RMQ模板
(一)首先是预处理,用动态规划(DP)解决。设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态)例如:A数列为:3 2 4 5 6 8 1 2 9 7F[1,0]表示第1个数起,长度为2^0=1的最大值,其实就是3这个数。同理 F[1,1] = max(3,2) = 3, F[1,2]=max(3,2,4,5) = 5,F[1,3]原创 2016-08-19 09:40:19 · 307 阅读 · 0 评论 -
POJ 2774 Long Long Message 后缀数组
2个串的最长公共子串#include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;#define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))#define G(x) ((x) < tb ? (x) * 3 +原创 2016-08-17 14:41:48 · 411 阅读 · 0 评论 -
POJ 2406 Power Strings KMP 或者后缀数组
找最小循环节#include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;char B[1000010];int nex[1100000];int lenB;void getNex(){ lenB = strlen(B);原创 2016-08-17 11:22:57 · 316 阅读 · 0 评论 -
POJ 3261Milk Patterns可重叠至少出现K次最长子串 二分+height分段
#include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;#define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))#define G(x) ((x) < tb ? (x) * 3 + 1 :((x) - tb原创 2016-08-17 11:19:10 · 325 阅读 · 0 评论 -
poj 1743 Musical Theme 后缀数组
题意:有N(1 1.长度至少为5个音符。 2.在乐曲中重复出现。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值) 3.重复出现的同一主题不能有公共部分。首先构造差分序列,二分+height分段。至于不能重叠维护每一段最大值最小值。判断是否重叠即可#include #include #include #原创 2016-08-16 21:45:45 · 297 阅读 · 0 评论 -
后缀数组
#define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))#define G(x) ((x) < tb ? (x) * 3 + 1 :((x) - tb) * 3 + 2)const int MAXN = 300010;const int MAXM = 100010;char input[MAXM];int wa[MAXN],wb[MAXN],ws[原创 2016-08-16 21:50:12 · 372 阅读 · 0 评论 -
POJ 3691 DNA repairAC自动机加DP
题意:给出N个模式串和一个文本串,问最少修改文本串中多少个字母使得文本串中不包含模式串。分析:N个模式串构建AC自动机,然后文本串在AC自动机中走,其中单词结点不可达。用dp[i][j]表示文本串第i个字母转移到AC自动机第j个结点最少修改字母的个数,状态转移方程为dp[i][j]=min(dp[i][j],dp[i-1][last]+add),last表示原创 2016-08-15 20:37:38 · 314 阅读 · 0 评论 -
矩阵的应用
题意】计算的小数点前三位数,不足三位补0,正整数n的最大值为20亿。【前提】:满足的值在【0,1】范围首先将展开之后可以发现的形式,同样的,有因此,是个整数,其中这正是解题的关键!由于所以的整转载 2016-08-15 17:17:56 · 579 阅读 · 0 评论 -
POJ 2778 DNA SequenceAC自动机 矩阵快速幂
#include #include #include #include #include #include #define mod 100000#define LL long longusing namespace std;const int M = 4;const int N = 1e6+10;struct Matrix{ int mat[110][110];原创 2016-08-15 14:47:24 · 360 阅读 · 0 评论 -
AC自动机模板
点击打开链接在一个字符串中出现模板串的个数#include #include #include #include #include #include #define MOD 1000000007using namespace std;const int N = 1e6+10;const int M = 26;struct Trie{ int next[N]转载 2016-08-15 11:22:46 · 271 阅读 · 0 评论 -
字典树模板
#include #include #include #include #include #include #define MOD 1000000007using namespace std;const int M = 100000;struct node{ int next[26]; int value; bool end;};node tree[原创 2016-08-15 10:10:53 · 292 阅读 · 0 评论 -
KMP模板
void getNex(){ lenA = strlen(A); lenB = strlen(B); nex[0] = -1; ll i = 0,j = -1; while(i if(j == -1 || B[i] == B[j]){ ++j,++i; if(B[i]!=B[j原创 2016-08-15 10:03:53 · 276 阅读 · 0 评论 -
左偏树
摘自《ACM/ICPC算法训练教程》键值是用于比较节点的大小距离则是如下定义的:节点i称为外节点,当且仅当节点i的左子树或右子树为空;节点i的距离时节点i到他的后代中,最近的外节点所经过的边数。特别地,如果节点i本身是外节点,则它的距离为0;而空节点的距离规定为-1。左偏树的4条性质:(1)节点的键值小于或等于它的左右子节点的键值(2)节点的左子节点的距离不小于右子节点的距离原创 2016-08-15 09:40:50 · 1751 阅读 · 0 评论 -
伸展树
伸展树/*维护序列,有6种操作:插入、删除、修改、翻转、求和、求最大子段和。*/#include #include #include using namespace std; int IN[500010];const int INF=1<<28; struct Node{ Node *pre,*ch[2]; bool rev,same;转载 2016-08-15 08:42:40 · 282 阅读 · 0 评论 -
树状数组初始化
《高级数据结构》 大多数情况下A数组一开始不全是0,如何初始化树状数组呢?一种显而易见的方法就是将A中的元素一个一个地添加进树状数组,不过这样的预处理时间复杂度为O(logn)。下面的算法更加优美,因为我们已经知道树状数组中:sum[index] = a[index-C(index)+1]+...+a[index],所以只需要一开始再维护一个前缀和的数组pre[x] = a[1]+a[2]原创 2016-08-05 09:58:25 · 2210 阅读 · 0 评论 -
字符串Hash
字符串hash粘贴的别人的代码:/// @brief BKDR Hash Function /// @detail 本 算法由于在Brian Kernighan与Dennis Ritchie的《The C Programming Language》一书被展示而得 名,是一种简单快捷的hash算法,也是Java目前采用的字符串的Hash算法(累乘因子为31)。 template转载 2016-08-01 11:29:05 · 380 阅读 · 0 评论 -
树状数组 改段求点
【1】修改操作:将A[l..r]之间的全部元素值加上c;【2】求和操作:求此时A[x]的值。操作【1】:updata(l-1, -c); updata(r, c);操作【2】:query(x)。#include #include#include#include #include #include #include #include #include原创 2016-07-25 08:34:49 · 408 阅读 · 0 评论 -
树状数组 改点求段
【1】修改操作:将A[x]的值加上val;【2】求和操作:求此时A[l..r]的和。#include #include#include#include #include #include #include #include #include #define LL long long#define MAXN 100000using namespace std;int su原创 2016-07-25 08:16:43 · 419 阅读 · 0 评论 -
二叉堆排序
#include #include #include #include #include #include #define MAXN 100010#define inf 0x3f3f3f3fusing namespace std;int a[MAXN];//大顶锥void HeapAdjust(int index,int n){ int l = index<<1;原创 2016-07-23 10:38:30 · 545 阅读 · 0 评论 -
并查集
#include #include #include #include #include #include #define MAXN 100010#define inf 0x3f3f3f3fusing namespace std;int uset[MAXN];int deep[MAXN];//深度void init(){ for(int i = 0; i < MAX原创 2016-07-23 09:59:00 · 346 阅读 · 0 评论 -
线段树单点更新 区间求和,求最值
#include #include #include #include #include #include #define MAXN 100010#define inf 0x3f3f3f3fusing namespace std;struct node{ int l,r;//区间[l,r] int sum;//区间和 int mx; //区间最大值原创 2016-07-23 09:00:32 · 683 阅读 · 0 评论 -
偏差
概念偏差 标准偏差绝对偏差:是指某一次测量值与平均值的差异。相对偏差:是指某一次测量的绝对偏差占平均值的百分比。标准偏差:是指统计结果在某一个时段内误差上下波动的幅度。统计学名词。一种量度数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。标准偏差的大小可通过标准偏差与平均值的倍率关系来衡量。 平均偏差:是指单项测定值与平均值的偏差原创 2018-01-08 17:39:48 · 1489 阅读 · 0 评论 -
全排列hash算法
参考的别人的点击打开链接p进制数K可表示为K = a0*p^0 + a1*p^1 + a2*p^2 + ... + an*p^n (其中0 它可以表示任何一个自然数。一种特殊的变进制数,它能够被用来实现 全排列的Hash函数,并且该Hash函数能够实现完美的防碰撞和空间利用(不会发生碰撞,且所有空间被完全使用,不多不少)。我们考查这样一种变进制数:第1位逢2进1,第2位逢3进1原创 2016-11-22 13:55:24 · 872 阅读 · 0 评论 -
polya
1/|G| {m^c(a1)+m^c(a2)+m^c(a3)+...+m^c(ag)}其中c(ai)为置换ai的循环节数(i = 1,2,...g)。m种颜色的珠子,每种颜色珠子个数不限,将这些珠子做成长度为n的项链,问能做成多少种不重复的项链。两条项链相同,当且仅当两条项链通过旋转或者翻转后能重合在一起,且对应珠子的颜色相同。(1)旋转:将项链顺时针旋转i格后,其循环节数为gcd(n原创 2016-08-22 11:35:03 · 493 阅读 · 0 评论 -
多校 World is Exploding
题目来源题意:有一个A序列,A序列的长度为N。在这个序列中有一些子集(a,b,c,d),满足a!=b!=c!=d,1Ad。最后输出这些序列的个数。思路:容斥原理(1)frontSmall[k]表示在下标k之前比A[k]小的个数(2)frontLarge[k]表示在下标k之前比A[k]大的个数(3)backSmall[k]表示在下标k之后比A[k]小的个数(4)backLar原创 2016-08-03 11:40:46 · 276 阅读 · 0 评论 -
POJ 3592 Instantaneous Transference强连通加缩点后求最长路
n*m的地图,从0,0,开始走,只能向下或向右走,每一个坐标只有0~9、#、*。如果为#代表墙不能通过,如果为*代表是传送门,可以传达其他位置,如果为数字,则代表该点的价值。求最大价值。先输入T,T组数据。输入n、m代表地图的大小。然后输入地图,接下来输入每一个传送门能传送的位置坐标。先用Tarjan把环求出来,然后进行缩点,最后构建一个新图,求最长路。#include #inc原创 2016-08-12 21:07:23 · 301 阅读 · 0 评论 -
3140 Contestants Division
一棵树的节点上均有权值, 将这棵树切成两半, 两个part之间的权值之和差异最小记忆化搜索#include #include #include #include #include #include #include #include #include #include #define LL long longusing namespace std;con原创 2016-08-22 09:57:30 · 291 阅读 · 0 评论 -
数位dp
// pos = 当前处理的位置(一般从高位到低位)// pre = 上一个位的数字(更高的那一位)// status = 要达到的状态,如果为1则可以认为找到了答案,到时候用来返回,// 给计数器+1。// limit = 是否受限,也即当前处理这位能否随便取值。如567,当前处理6这位,// 如果前面取转载 2016-11-05 17:14:41 · 278 阅读 · 0 评论 -
POJ 2777 Count Color
题意:L的长度,从1~L,在区间上添加颜色(1~T),颜色初始全为1。输入P A B :查询A~B区间不同颜色的数目;输入C A B C:更新A~B区间的颜色为C;运用线段树的延时标记。#include #include #include #include #include #define MAXN 100010using namespace std;struct node原创 2016-07-20 19:34:59 · 294 阅读 · 0 评论 -
POJ 2886 Who Gets the Most Candies?
题意:有N个人围成一圈,编号从1到N,每个人都有一个卡片,卡片上写了一个数字。若该数字小于0,则从他的从左边开始一直查到该数字的位置(不包括他自己),否则,从右边开始;然后他跳出该循环圈,下一个人是查到的那个人。某人是第m个跳出会得到F(m)个糖果,F(m)为么得因子个数。最后输出谁得到最多糖果的人的姓名和糖果数量。求F(m)用反素数求。对于任何正整数x,其约数的个数记做g(x).例如g(原创 2016-07-22 11:52:17 · 288 阅读 · 0 评论 -
二分图模板
#include #include int g[510][510];int linker[510];int used[510];int n,k,cnt;int DFS( int u ){ int v; for( v = 1; v <= n; v++ ) { if( g[u][v] && !used[v原创 2016-08-08 09:11:33 · 271 阅读 · 0 评论 -
最小费用最大流poj2516
#include #include #include #include #include #include #include #include #include #define LL long long#define inf 0x3f3f3f3fusing namespace std;const int N = 1e3+10;struct node{ int to原创 2016-08-08 09:14:20 · 403 阅读 · 0 评论 -
判断是否为二分图
无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数判断一个图是不是二分图,思路当然就是染色法,首先给一个顶点然色,然后与它相邻的顶点全部染相反的颜色,如果过程中发现要染的点已经染色了,而且是和现在点相同的颜色的话,那么就说明不是一个二分图。首先任意取出一个顶点进行染色,和该节点相邻的点有三种情况:1.未染色 那么继续染色此节点(染色为另一种原创 2016-08-08 10:19:01 · 736 阅读 · 0 评论 -
点双连通分量
#include #include #include #include #include using namespace std;const int N = 1e6+10;const int NN = 1e3+10;struct node{ int to,next;}edge[N];int head[NN],top;int dfn[NN],low[NN],time,原创 2016-08-09 10:21:58 · 378 阅读 · 0 评论 -
POJ3694
一共有N个点,m条边,无向图,q次询问,每次添加一个边,问添加完边后还剩多少 桥 。用tarjan边连通计算 初始桥的个数。LCA计算添加边之后桥的个数。并查集用来 把每一个边连通分量联系在一起。#include #include #include #include #include #include #include #include #include #defi原创 2016-08-11 10:56:35 · 344 阅读 · 0 评论