自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Wtothey_的博客

依旧年轻。

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

转载 母函数简单实现

转自:Preeee1.以一个问题为引例:重量为1,3,5g的砝码各两个,可以称出多少种重量不同的物品?构造母函数G(x)=(1+x+x^2)(1+x^3+x^6)(1+x^5+x^10),其中x的指数表示砝码的重量,x表示砝码。每个括号里代表的状态是取0个、取1个、取2个。得到的各个x^n前面的系数就是每种质量可以称出的方案数目。所得式子的个数就代表可以称出多少种的重量。2.再...

2019-12-15 12:18:26 125

原创 数据离散化

结构体struct Data{ int x, id; //数据, 下标 bool operator < (const Data &a) const{ return x < a.x; }}d[N];//按x排序sort(d, d+N);for(int i=0; i<N; ++i) a[d[i].id...

2019-08-19 17:56:53 130

原创 洛谷 3373 线段树

传送门思路:关键在于乘与加的先后计算关系,(x + y) * k = x * k + y * k,从这里可以看出来,把加法转化为乘法计算,取消了+与*先后顺序pushdown时,即为乘法标记 * 原有数据 + 加法标记 * 长度。注意点:这个题数据范围取long long 读入的k也是long long,传入函数时用long long 个人wa点:pushdown时,暂存m...

2019-08-19 16:37:55 171

原创 线段树[模板]

建树#define Ln(x) x << 1#define Rn(x) (x << 1) | 1struct SegTree{ int l, r, data, lazy; SegTree(int l=0, int r=0, int data=0, int lazy=0): l(l), r(r), data(data), lazy(lazy) {};}t...

2019-08-19 10:13:47 108

原创 LCA(最近公共祖先)

lca即两点到达的第一个公共节点前两个方法取自:Cold_Chair,树剖方法取自:Frocean目录暴力往上跳倍增算法树剖法暴力往上跳先把x,y跳到同一深度,然后同时往上跳,最后fa[x] == fa[y]即找到LCA。时间复杂度与树的深度有关,则最坏情况就是一条链了。int dep[maxn];void dfs(int u){ for(int i...

2019-08-18 17:39:11 101

原创 HDU 2665 整体二分

hdu 2665 传送门题意:查询区间内第k小的数。思路:主席树或者整体二分。学习了一下整体二分,理解的还是不怎么透彻,有一些感觉,推荐文章:整体二分个人感悟:整体二分分治思想:先统计L~R内原始数列中小于等于 二分答案mid 的个数有几个;树状数组,结果为tmp 若查询区间需要的k小于等于tmp, 意味着这tmp个数中一定有它要的那个第k小数,则与原始数列中<=...

2019-08-18 15:42:48 118

原创 Trie + AC自动机

目录Trie 字典树AC自动机Trie 字典树进行快速的查找字符串是否存在 进行快速的字符串的前缀和的相关的性质的查询建立struct Trie{ int ch[maxn][30]; int tot; //总结点个数 int cnt[maxn]; //是否为单词 void init(){ tot = ...

2019-08-17 14:45:41 213

原创 KMP + 拓展KMP[模板]

KMP字符串匹配问题得到失配指针,fail的值为上一次匹配到的最长长度-1,因为是公共前缀,所以也就是下标-1得到上一次匹配位置j后,当前位置与j+1位置 字母相同则匹配长度+1,否则无法匹配,即为-1 a a b a b a a b fail -1 0 -1 0 -1 0 1...

2019-08-17 11:30:50 93

原创 狄利克雷卷积+莫比乌斯反演+杜教筛

狄利克雷卷积狄利克雷卷积与数论函数构成群,四个性质:封闭性 结合律 逆元 幺元特殊卷积,互为逆元莫比乌斯反演欧拉函数+莫比乌斯函数点这里约数反演定义:反演:证明:(狄利克雷卷积) ...

2019-08-16 19:29:36 306

原创 欧拉函数与莫比乌斯函数 [模板]

质因数分解重要数论函数推一个欧拉函数和莫比乌斯函数的关系式:(忘记了下面的狄利克雷卷积,点这里狄利克雷+莫比乌斯反演)推导的:欧拉函数求单个phi值:int Euler(int n){ LL k = (LL)sqrt(n + 0.5); LL ans = n; for(int i=2; i<=k; ++i...

2019-08-16 14:58:55 430

原创 Poj 2451 Uyuw's Concert (半平面交)

传送带模板题, 注意的一点,atan2在g++中会超时,在c++中却ac了#include <iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<vector>using namespac...

2019-08-14 16:11:29 168 1

原创 计算几何模板

目录点向量点与直线投射点、对称点直线关系、共端点线段关系两线段相交及交点两直线交点点线 距离多边形面积凸包(基于水平序的Andrew)点在多边形中:旋转法旋转卡壳求多边形直径有向直线切割多边形半平面交总代码点struct Point{ db x, y; Point(db x, db y): x(x), y(...

2019-08-14 16:07:07 187

原创 凸包(Andrew算法)模板

Andrew算法是Graham的变种,相较Graham,其更快,数值稳定性更好。 ——《蓝书》Andrew 模板struct Node{ int x, y;}p[maxn], ch[maxn];bool cmp(Node a, Node b){ if(a.x == b.x) return a.y < b.y; return a.x <...

2019-08-11 17:01:05 251

原创 Dinic【模板】

struct Edge{ int next, to; Edge(){}; Edge(int next, int to): next(next), to(to){};}edge[maxm*2];int head[maxn], W[maxn], cnt;void add(int u, int v, int w){ edge[++cnt] = Edge(head[u], v); hea...

2019-08-05 20:21:03 118

原创 初等图论【模板】

目录链式前向星拓扑序(有向图)迪杰斯特拉弗洛伊德SPFA: (单源最短路)欧拉图:链式前向星struct Edge{ int next, to; //下一条边的标号,该边的终点 Edge() {}; Edge(int next, int to): next(next), to(to) {};}edge[maxm];int head[...

2019-08-05 15:31:40 155

原创 2018 CCPC网络赛 补题

Buy and Resell(优先队列)题目链接题意:按顺序走过N个城市,每个城市有对应的货物价值,可以买入或者卖出,求最多利润及获得最大利润的最短交易次数。题解:我们假设在每一个城市都买入,维护一个升序的优先队列,里面标识的是买入的货物价值,所以每次push进去,并枚举每个城市的货物价值,如果大于队列队首元素,则给结果加上差值(记作x1),并次数加一,在这里需要考虑到可能后面有货物...

2019-07-09 18:53:10 137

原创 基础数论模板

目录欧几里得算法(辗转相除)快速幂一般筛线性筛算数基本定理费马大小定理欧拉定理欧拉函数拓展欧几里得拓展欧几里得求逆元逆元打表欧几里得算法(辗转相除)LL gcd(LL a, LL b){ if(!b) return a; return gcd(b, a % b);}快速幂LL pow_mod(LL a, L...

2019-07-09 18:52:40 98

原创 Poj 1113 Wall(凸包)

题目链接解析:凸包问题,城堡各点构成的一个凸包,结果就是凸包周长加上一个以要求的距离为半径的圆周(任意凸多边形的外角和都是)总结:1. 成员函数的构造。 2. 四舍五入:(int)(ans + 0.5)。  3. sqrt的参数必须是浮点型。 4. 即使输入的是整数,在计算边长还是会变成小数,用int会影响精度问题。 5. 一组测试数据 AC代码:#include&lt;cstd...

2018-08-27 17:01:26 115

原创 优先对列

优先队列:STL:Priority_queue(Type, Container, Functional)Type:即类型,Container即包含数据的容器,默认vector&lt;int&gt;,Functional即定义元素比较方式。与队列类似,特性就是加入元素后自行排序。priority_queue包含函数:empty() 判断空与否,size() 求元素个数,top() 返...

2018-08-26 11:05:02 224

原创 康托展开和逆康托展开

康托展开:一种从全排列到自然数(即排列名次)的双射函数。 公式:,a[0]是指后面比首位数字小的数字个数,a[1]是指后面比第二位数字小的数字个数,其他同理,a[n-1]是0。本质其实是找比原数小的排列,所以保证数字小于各个位数字。 举例说明:“2431”,则a[0] = 1,比2小的数只有1,a[1] = 2,比4小的数有3、2、1,但是2出现过,所以a[1] = 2,同理,a[2] =...

2018-08-25 21:11:55 123

原创 二维树状数组模板

二维树状数组就是求矩阵和。一维树状数组中:C[1] = a1, C[2] = a1 + a2, C[3] = a3;记:B[1]={a11,a11+a12,a13,a11+a12+a13+a14,a15,a15+a16,…} 这是第一行的一维树状数组 B[2]={a21,a21+a22,a23,a21+a22+a23+a24,a25,a25+a26,…} 这是第二行的一维树状数组...

2018-08-24 18:17:21 130

原创 Count Colors(线段树)

题目链接:http://poj.org/problem?id=2777 题意:给长为L的墙壁涂色,C涂色,P查询几种颜色。 题解:区间替换,区间查询的模板题。由于只有30种颜色,所以选择二进制状压判断状态,用Lazy-tag实现更新(即每次更新用tag标记,等到查询的时候再传下去,不清楚的话,建议百度),父节点的状态就是左孩子和右孩子的或运算,如lnode:101, node:110,则父节点...

2018-08-23 23:51:35 151

原创 A Simple Problem with Integers (线段树,Lazy-tag)

题目链接:http://poj.org/problem?id=3468 题意:就是区间加,区间查询的模板题 理解:线段树的区间加用到Lazy-tag思想,即查询到对应区间后进行加的操作,然后标记,等到下次进行查询操作,查询到这个点的时候再往下传,对子结点的区间进行加的操作,以减少时间的损耗。做这道题的时候,自己考虑了很多无谓的点,最重要的一个就是update里面的pushd...

2018-08-23 17:17:17 90

原创 Max Sum of Max-K-sub-sequence

题目 题意:区间连续最大和 题解:转化为求sum[i] - sum[j]最大,即求在 i位的 k区间范围内最小的sum [j],单调队列维护一下最小值就好了。 反思:对deque的理解太浅,以至于卡了很久,由于deque的迭代器失效问题,debug是会报错的,但是运行是没有问题的。 链接:https://blog.csdn.net/ww32zz/article/details/48...

2018-08-22 16:08:51 224

原创 RMQ With Shift

题目 题意:query就是查询,shift( a, b, c)则是单点修改,将区间的a, b, c位置的值交换,即 a位置换成 b位置的值,b位置换成  c位置的值,c位置换成 a位置的值。 题解:只要理解了题意就是一道简单的单点修改,区间查询的线段树问题。 注意:字符串转化为数字的时候记得考虑是几位数,每次都当作个位数处理了(捂脸 #include&lt;cstdio&gt;#...

2018-08-22 15:34:33 222

原创 Japan (树状数组)

题目 题意:题意挺好理解的,就是求交叉点。 思路:样例是提示点。按照样例将公路一条一条画一下,就会发现第 i条线的交叉点数就是:在它之前的线段中终点城市标号大于它的数量。需要特殊考虑的是,出发自同一城市的线段,终点需从小到大,才不会互相影响。数据不是按照顺序排好的,所以要对数据按照西海岸城市升序排列,两个城市相同时按东海岸城市升序。 #include&lt;cstdio&gt;#in...

2018-08-21 17:13:50 181

原创 Stars 树状数组

题目传送门 题意:一个点(x , y) ,其他点(x0 , y0)中满足 x0 &lt;= x且y0 &lt;= y 的点的个数就是它的等级。刚开始一直不理解题意(太菜了),看了别人的博客才知道。 题解:题中数据读入已经按照 y依次增大的顺序读入了,所以之有将所有小于 x的点统计出来就好了,简单的树状数组求和就好了。#include&lt;cstdio&gt;#define lowbit...

2018-08-21 14:54:39 119

原创 MooFest (树状数组)

题目:http://poj.org/problem?id=1990题意:n个耳背的奶牛,第i个奶牛听到声音需要v[i]的分贝,站在x[i]位置的直线上,两个奶牛之间对话的音量是max(v[i],v[j])*两者之间的距离,问所有奶牛互相可以听到的音量和。思路:将所有奶牛按照可听到音量的大小进行排序,两只奶牛对话所需的分贝就是排在后面的奶牛的 v,所以排在后面的奶牛对排在前面的奶牛对话的音量...

2018-08-20 21:01:29 227

原创 桶排序与计数排序

桶排序:就是标记一下是否出现过,再遍历一遍。(代码借(chao)鉴(xi))。#include&lt;iostream&gt;using namespace std;int main() { int input[11]; int heap[100] = {0};//初始化桶,排序0到100之间的数,heap[排序范围最大值] int i; for (size_t i = 1;...

2018-08-20 10:48:57 353

原创 bzoj 1030 文本生成器(AC+DP)

传送门biu~题意:给几个模式串,找26^m次方个串中出现这些模式串的个数。(即方案数。题解:逆向思维,算是一个简单的容斥原理,找到所有不含有模式串的个数,剪掉。方法就是f[i][j]来统计在第i位(i&lt;=m)时,匹配到第j个结点的方案数。最后求和,做差就好了。起初总想不明白如何转移的,最后想想它是把26个字母都遍历一遍进行转移,就差不多。转移方程:f[i+1][v] = (f...

2018-08-19 19:33:30 151

原创 Computer Virus on Planet Pandora (AC自动机模板题)

题目传送门思路:AC自动机正着扫一遍,反着扫一遍。WA:合成字符串str2时,未进行末尾赋0,导致上次数据保留了下来。//936ms#include&lt;cstdio&gt;#include&lt;queue&gt;#include&lt;cstring&gt;using namespace std;const int maxs = 5100010,maxp = 1010,...

2018-08-19 09:48:45 770

原创 Keywords Search (AC自动机)

吉祥的hdu 2222半日份七夕节的礼物。(连续越界打击,tle打击,最后玄学ac问题所在:越界:结点数组开小了。 tle:问题在于初始化ch结点数组时,只初始化了ch[0]。 空间超限:就是maxm太大了思路就是建Trie树,然后建立fail数组,继而查找。可查看Trie+AC自动机建树:void ins(char *s) ...

2018-08-17 20:05:22 1783 3

原创 数位dp&记忆化搜索

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089题意不要含有连续62或4的串,数位dp入门题。d[n][t]表示的是第n位为t的个数,b[i]是区间端点每位数,flag用于判断这一位能取到9还是只能是区间端点在该位的数(取决于上一位是否取到最大的数,即区间端点在该位的数)。#include&lt;cstdio&gt;#inclu...

2018-08-13 13:12:36 309

原创 单调队列

单调队列就是维护一个顺序队列,或增或减,用STL的数据结构的话需要用deque(双向队列),被queue坑了一下午。单调队列的思想大概就是一个已有递增队列(求最小),加入一个数a时,需要将队列最后一个数与a比较,若大于等于a,则pop掉,这个时候就是queue不能解决的了,需要pop_back(),直到空队列或者队列末尾数字小于a,将a push进队列。 下面是Sliding Wind...

2018-08-12 18:47:22 90

原创 最小度限制生成树

题目链接:http://poj.org/problem?id=1639思路:先读入所有结点,初始化并查集,kruskal算法构成几个子树,读入v0结点和与其相连的节点,排序,将几个子树连接起来,遍历v0,递归求出从cnt度到K度的生成树 ,遍历n0条出边中没用过的出边,找到差额最小添删操作。#include&lt;cstdio&gt;#include&lt;iostream&gt;#...

2018-08-09 15:13:22 262

原创 树的几个基础模板

无根树转换有根树:#include&lt;vector&gt;vector&lt;int&gt; G[1000];int u,v;for(int i=0;i&lt;n-1;++i) //n-1条边 { scanf("%d%d",&amp;u,&amp;v); G[u].push_back(v); G[v].push_back(u);}void dfs(int u,int...

2018-08-08 16:47:59 112

原创 并查集

并查集算法(union_find sets)不支持分割一个集合,求连通子图、求最小生成树 并查集由pre[]数组和两个函数find(),join()组成,find()是寻找根节点,join()是连接两个根节点,合并路线的。 模板:初始化,建立子树我们将每一个结点的前导结点设置为自己,如果在join函数时未能形成连通,将独立成点。for(int i=0;i&lt;1000;++i)...

2018-08-06 11:19:12 1498

原创 链式向前星与Trajan算法

模板:加边:struct node{ int to,next,w;}edge[1000];int head[1000],cnt;void add(int u,int v,int w){ ++cnt; edge[cnt].to = v; edge[cnt].next = head[u]; edge[cnt].w = w; head[u...

2018-08-06 10:32:18 311

原创 求组合数

方法一:递推,溢出问题C(n,m)=C(n-1,m-1)+C(n-1,m)方法二:取对数,精度问题log(c(n,m))= log( n!/(n-m)!) -log m! = log(n-m+1)+log(n-m+2)+...+log(n)-log(1)-log(2)-...-log(m)注意,log以2为底,用log性质,log(a)b=log a / log b方法...

2018-08-04 11:04:10 164

空空如也

空空如也

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

TA关注的人

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