各种板子
1
__meteor
对于未来, 我只是一个孩子;
展开
-
求重心的板子
#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; int N; // 1<= N <= 20000const int maxn = 20000;vector tree[maxn + 5]; // tree[i转载 2017-10-24 18:53:53 · 165 阅读 · 0 评论 -
素数线性筛模板
参考于该博客 int Mark[MAXSIZE]; int prime[MAXSIZE]; //判断是否是一个素数 Mark 标记数组 index 素数个数 int Prime(){ int index = 0; memset(Mark,0,sizeof(Mark)); for(int i = 2; i < MAXSIZE; ...原创 2018-09-01 20:38:10 · 170 阅读 · 0 评论 -
CF1037E图论思维(set::erase的用法)
传送门#include<bits/stdc++.h>using namespace std;#define fir first#define sec secondconst int N=2e5+10;typedef pair<int, int> pii;pii e[N];set<int> G[N];bool removed[N];int ...原创 2018-09-04 19:12:30 · 213 阅读 · 0 评论 -
2018南京网络赛 Skr(manacher奇偶模板+hash模板)
传送门题意:给一个只有‘1’~‘9’的串,求不同回文串代表数值的和思路:马拉车找回文串,hash标记不同,hash方法求数值#include<bits/stdc++.h>using namespace std;const int N=2e6+10;const int mo=1e9+7;typedef long long ll;typedef unsigned l...原创 2018-09-02 18:26:13 · 250 阅读 · 0 评论 -
计蒜客 宝藏 状压dp (遍历二进制中一的子集的小技巧)
传送门思路是参照着这个博客写的https://blog.csdn.net/a1035719430/article/details/80488083dp的一个状态是点集,这个是很好想的,但是加上路径上宝藏的数量就不好想了,因为所有路径都挖完是一颗树,我们可以用一维表示状态中最大的深度,即dp[i][s]表示深度为i,包含s集合点的时候最小值转移就是dp[i][t]=min(dp[i][t...原创 2018-09-05 09:14:09 · 337 阅读 · 3 评论 -
落谷3773 数论+dp递推
https://www.luogu.org/problemnew/show/P3773这个题就用到了上篇博客https://blog.csdn.net/du_lun/article/details/82414086,遍历子集的小技巧,题意是找有多少个长度>=2的下降子序列,满足mod2的lucas,并且值大于0由lucas可以知道C(x,y)=C(a1,b1)*C(a2,b2)…...原创 2018-09-05 15:30:21 · 217 阅读 · 0 评论 -
HDU5536 01字典树求模板
#include<bits/stdc++.h>using namespace std;const int N=1e5+10;struct Tire{ int nxt[N][2], cnt[N], ed[N]; int L, root; void init(){ L=root=0; nxt[root][0]=nxt[root...原创 2018-10-01 19:52:25 · 201 阅读 · 0 评论 -
HDU 5955 gauss概率dp+ac自动机
题意:有n个人,每个人猜一个[1,6]长度为L的序列,然后无限制的掷骰子,先掷到的那个序列,那个人就是winner,问每个人赢得概率。思路:骰子是掷无限次的,但是有许多状态是重复的,每一种掷法最终必定是以某一个人的序列结束的,也就是说,谁都不赢的序列是无穷的,概率趋近于0,所以每个人概率相加是1.我们可以用ac自动机节点编号当做某种情况的状态,nxt数组就是这个状态转向的下个状态。...原创 2018-10-11 11:58:01 · 309 阅读 · 0 评论 -
HDU 4408 最小生成树计数
传送门思路:首先需要了解Matrix_Tree定理1.设 G是无向图的邻接表,D是无向图各个点的度数2.令M=D-G,则M的任意n-1阶余子式的行列式值的 绝对值, 就是无向图生成树的个数应注意的是邻接表的值不只是0,1值,也就是说,当图出现重边的话,邻接表该位置累加。这道题思路,对于最小生成树,克鲁斯卡尔算法是将边从小到大排序,对于同一大小的边,在最小生成树中用到的数量是...原创 2018-09-21 13:05:35 · 239 阅读 · 0 评论 -
HDU 4418 (期望dp 高斯消元)
题意:有一个坐标轴,从s点开始,为了到达e点,走的时候是周而复始循环的,比如 0 1 2 3 3 2 0.。。,从一个点开始,每走k步都有pk的概率停下,问正好停在目标点的期望是多少;思路:设dp[i]是在i点到e点的期望,dp[i]=p1*dp[i+1]+p2*dp[i+2]....+pk*dp[i+k](因为期望都是倒着推)gauss 求解就可以了因为有不能到的点,如果不能到的点...原创 2018-08-25 10:57:58 · 287 阅读 · 0 评论 -
二维线段树模板
title: 二维线段树模板date: 2018-10-31 15:21:44tags:- 二维线段树categories: “算法”这个模板是根据HDU-4819编写的。功能是用二维线段树进行二维点修改和区间查询最小者和最大值。二维线段树的思想跟一维一样,只不过一维是二分二叉树,二维是四分四叉树。具体实现看代码。#include<bits/stdc++.h>us...原创 2018-11-01 17:02:00 · 910 阅读 · 0 评论 -
超级输入输出外挂(转载)
转载博主链接前言: 在ACM比赛中,大家可能会遇到一些读入相当大的题目,此时前人告诉我们:遇到这些题目,我们最好不要用cin/cout,因为cin/cout在读入输出的过程中相对与scanf/printf来说比较慢。 但是还是有那么些个善(丧)良(心)的出题人还是喜欢卡读入的常数,可能我们的scanf/printf,甚至普通的read()函数也无法支撑。此时要如何办呢?于是...转载 2018-08-31 13:31:12 · 300 阅读 · 0 评论 -
HDU5884 二分+哈弗曼树
传送门huffman模板,如果每次取k个能取完,num=k,取不完先将n%(k-1)取完,再每次取k#include<bits/stdc++.h>using namespace std;const int N=1e5+10;typedef long long ll;int arr[N], n, limit;/****************************/...原创 2018-08-28 11:37:13 · 144 阅读 · 0 评论 -
串的模式匹配算法-KMP
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int nxt[110];char s[110], s1[100];void getnxt(){ int j=nxt[0]=-1, i=0; int len=strlen(s); whi...原创 2017-11-10 20:32:37 · 227 阅读 · 0 评论 -
最长路
//以i为终点 嵌套矩形问题 int dfs(i){ if(d[i]>0) return d[i]; d[i]=1; for(int j=1; j<=n; j++) { if(G[i][j]) d[i] =max(d[i], dfs(j)+1); } return d[i];}原创 2018-03-31 20:31:11 · 247 阅读 · 0 评论 -
ZOJ - 3609 (逆元、扩展欧几里得板子)
#include<cstdio>using namespace std;typedef long long ll;ll extend_gcd(ll a, ll b, ll &x, ll &y){ if(!a&&!b) return -1; if(b==0){ x=1; y=0; return a; } ll d=extend_gcd(...原创 2018-04-22 17:20:15 · 354 阅读 · 0 评论 -
BZOJ 3209 数位dp(求单个phi值模板)
传送门题意是求,n是1e15,枚举1的个数,数位dp#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;typedef long long ll;const int N=1e5+10;const ...原创 2018-08-26 20:50:04 · 165 阅读 · 0 评论 -
偏序关系与dp BZOJ3594(二维树状数组)
传送门偏序关系二维树状数组这个题用dp[i][j]表示前i个数,以h[i]结尾,用了j次修改,最长的非递减序列。但是这样直接dp的话如下for(int i=1; i<=n; i++){ for(int j=0; j<=K; j++){ for(int a=0; a<i; a++){ fo...原创 2018-08-22 20:17:43 · 437 阅读 · 0 评论 -
偏序关系CDQ BZOJ 3262 陌上花开
陌上花开,可缓缓归矣偏序关系就是按照某个条件的排序关系,这个题是三维偏序关系,然后给这些花划分等级,也就是说,A(x, y, z) 比A'(x',y',z')等级高的话 那么就满足x>=x', y>=y', z>=z'。我们只要统计一下比自己等级低的有几个,按照这个数量做一个等级归纳排序,输出每个等级的个数就解决了。解决这类问题可以用cdq+树状数组,首先我们对x排序,然...原创 2018-08-22 20:03:33 · 214 阅读 · 0 评论 -
牛课多校F-TypingPractise(KMP或者AC自动机)
传送门思路:用KMP和AC思路是一样的。ac的思路就是跑文本串,记录下每个节点的最小值,这样会省时间,因为fail指针的存在,我们不需要管模式串,kmp的话就是每个模式串都要匹配,取最小值;#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int val[N];int nxt[500010][2...原创 2018-08-16 22:14:52 · 249 阅读 · 0 评论 -
HDU 6397 Character Encoding(容斥)
传送门挑选m个数 ,和为k,数的取值为0~n-1,相当于将每个数加1,使挑的m个数和是k+m,可以看成k+m个1,用m-1个隔板,隔成m分,所以总数为C(m+k-1, m-1),减去不合法的,就是大于n的情况。先看只有一个位置大于n,有C(m,1)*C(m+k-n-1, m-1)种情况,但是有重复,比如1,3,2,1 。 3,1,2 ,1这两种情况,n是2,k是8的话,3、3、2、1是一...原创 2018-08-15 21:30:13 · 170 阅读 · 0 评论 -
HDU6395 分块思想
传送门 #include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+10;const int mo=1e9+7;ll n, P, F[N], C, D, inv[N];struct Matrix{ ll m[3][3];};void init(){...原创 2018-08-15 19:04:21 · 270 阅读 · 0 评论 -
HDU1695+HDU6390 莫比乌斯反演入门+分块思想。
HDU1695莫比乌斯反演两个公式思路:该题的题意是给你两个范围,1~n,1~m,求x属于1~n,y属于1~m, 且GCD(x,y)==k,这样的有多少对。等同于求1~n/k, 1~m/k, gcd(x,y)==1,的对数。令f(t)为gcd(x, y)等于t的个数,F(n)等于gcd(x, y)=t的倍数的个数。所以可以用第二个公式,就是说gcd(x,y)等于t的倍数的所...原创 2018-08-14 20:19:20 · 409 阅读 · 0 评论 -
HDU 6350 Always Online (仙人掌图,最大流)
传送门这道题真的是坑,竟然用ull,ll都会爆。首先这是一个仙人掌图。题意让求任意两点最大流,再进行异或。先说最大流,对于环上任意两点最大流,就是两条路径最小的边和,这就等效于求出环中最小的边,使环上任意一条边都加上这条边,然后去掉最小边。这样会求出一棵树。我们将边按从大到小排序,每次向空图里加一条边(用并查集维护),那么加的这条边就是两个连通分量的最大流。还是老方法。对于仙人掌图,(...原创 2018-08-12 21:25:18 · 907 阅读 · 0 评论 -
蓝桥 第八届 A组 油漆面积
该题有很多种做法,乱搞可以过,最好的方法应该是扫描线,本题是扫描线模板题官网数据第一个错了,所以83分就是满分#include<bits/stdc++.h>using namespace std;const int N=1e4+10;#define mp(x,y) make_pair(x,y) #define fir first #define sec sec...原创 2019-03-18 21:44:11 · 140 阅读 · 0 评论