板子
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
最小表示法, 求字典序最小
int main(){ int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); scanf("%s",a); strcpy(b,a); strcat(a,b); int i,j,k; for(i=0,j=原创 2017-07-15 22:43:58 · 910 阅读 · 0 评论 -
大素数判定板子
/** @Cain*/const int S = 20;inline ll mult_mod(ll a, ll b, ll m){ ll c = a*b-(ll)((long double)a*b/m+0.5)*m; return c<0 ? c+m : c;}ll pow_mod(ll a,ll b,ll m){ ll res = 1; while (b原创 2017-08-05 13:50:27 · 424 阅读 · 0 评论 -
RMQ -- 不修改的权值的求区间最大最小值
模板题 //介绍的是RMQ - ST 在线算法. 这篇博客讲的好,不懂就去看 //所以RMQ一般也就在LCA中有点应用,其他运用还是不多,主要学的是思路.//先放一个板子,解释与AC Code 在下面./** @Cain*/const int maxn = 1e6+5;int dp[maxn][32];int n;void RMQ(){ for(int j=1;(1<<j)<原创 2017-07-26 01:09:25 · 403 阅读 · 0 评论 -
HDU 6172 and HDU 6185 【线性递推 + 思维 + 板子】
这两道题都是给的线性递推式(输入只有一个未知数n), 那么我写这个博客的目的就是保存一个超强模板, 可以解决任何线性递推式. 这个板子是我从百度之星复赛上”偷”的杜教的板子. 所以我们现在要做的是用绝对正确的方法求出递推式的前几项. 然后扔进这个板子就可以了. //这些板子都可以直接用, 不用管mod, 带了mod的. 所以用的时候只用改mod的值和前几项的数值. 当然前几项丢的越多越好, 一般8个原创 2017-09-03 13:14:19 · 1281 阅读 · 0 评论 -
大数C++板子
这个板子可以解决长度为4000之内的大数之间的运算, 并且把所有会用到的运算都加进去了, 但是总的来说, 感觉抄板子都要找很久, 而且可能抄错, 所以比赛的时候可能还是会用其他语言写题吧, 这个还是保存着.这道题是以 HDU 6202#include <cmath>#include <map>#include <vector>#include <cstdio>#include <cstdli原创 2017-09-17 23:46:11 · 402 阅读 · 0 评论 -
判断图中是否存在环的板子
这个是判断有向图是否存在环的板子: (比较重要, 很多有向图的题中都要用)int vis[maxn];vector<int>g[maxn];bool cycle(int u) { // 有环返回true, 否则返回false. if (vis[u] == 1) return true; if (vis[u] == 2) return false; ...原创 2018-02-01 00:17:26 · 344 阅读 · 0 评论 -
查分约束系统讲解以及板子
以HDU3592作为背景 板子const int maxn=1e4+5;const int inf = 0x3f3f3f3f; //用这个可以直接memint n;int head[maxn], cnt, dis[maxn];bool vis[maxn];int times[maxn];struct node{ int to,next,w;}e[maxn1];v原创 2017-09-12 00:19:56 · 500 阅读 · 0 评论 -
LCA --- 常规的三种算法
模板题,后面的三种方法都可以做,模板也是基于这道题的//前言: 在dfs过程中, 一定会遍历到每两个点的的LCA, 并且由于顺序问题, 一定不会遍历到他们的LCA的祖先, 所以就可以当遍历到第二个相关的点时就可以直接求出了他们LCA了.ST在线这篇博客讲的很好 1: LCA-RMQ 在线算法(即问一个答一个)借用上面那张图 看完这幅图, 我觉得你就应该懂了. 给出代码实现: (...原创 2017-07-29 01:09:05 · 577 阅读 · 0 评论 -
划分树
这篇博客讲的炒鸡好,不懂的就进去看看 //相信这篇博客已经讲得非常清楚了, 所以这里就只贴下我自己的理解和代码. 以poj – 2104 为例 板子:(老规矩)/** @Cain*/const int maxn = 1e5+5;int sorted[maxn];int val[20][maxn];int num[20][maxn];void build(int l,int r,int原创 2017-08-11 20:30:31 · 309 阅读 · 0 评论 -
凸包 (旋转卡壳)
凸包板子:/** @Cain*/const int maxn=1e5+5;struct point{ int x,y; point(int x=0,int y=0):x(x),y(y){} friend int operator * (const point&amp;amp;amp;amp;amp;amp; a,const point&amp;amp;amp;amp;amp;amp; b){ return a.x*b.y原创 2017-08-03 22:39:37 · 503 阅读 · 0 评论 -
建立矩阵的方法
这里出现的难点是单元矩阵的构造原理,我也不明白其中缘由,但是百度到一个矩阵的PPT上讲,在右上角的(n - 1) * (n - 1)的小矩阵中的主对角线上填1,矩阵第n行填对应的系数,其他地方都填0即可。当然,这个矩阵颠倒一下方向什么的也未尝不可。(比如斐波那契的可以构造为0111,也可以构造为1110)举一个简单的例子: 找到f(n) = 4f(n - 1) - 3f(n - 2) + 2f(原创 2017-07-16 00:45:13 · 1204 阅读 · 0 评论 -
矩阵快速幂
struct Ma{ ll a[50][50]; void cc(){ memset(a,0,sizeof(a)); } Ma operator * (const Ma &b) const { Ma tmp; tmp.cc(); for(int i=0;i<ssize;i++){原创 2017-07-16 09:54:02 · 239 阅读 · 0 评论 -
网络流之最大流模板
Dinic算法, 复杂度On*n*m(n是点数,m是边数),因为一般点数比边数少, 所以比EK(Om*m*n)更优一点.int head[maxn], cnt;int n, m, tim[maxn], s, t;bool vis[maxn];int d[maxn], cur[maxn];struct Edge { int u, v, cap, flow;} e[maxn*600];原创 2017-07-16 22:27:40 · 368 阅读 · 0 评论 -
ACM中的基本数学知识掌握 --- 【数论/组合/博弈论/计算几何】非常重要
持续更新 这里有一篇对poj上的数论进行的总结. 总结的很好. 传送门 我就这里面讲的博客进行一波加深解释. (题目太多,连接就不贴了,就只贴了对应的名词解释, 而有些我贴的是博客地址, 因为的涉及的算法稍微好一点嘛) 博弈论 — 巴什博弈, 尼姆博弈 (就会这两个简单的博弈) 相关题目: POJ 2234 Matches Game POJ 2975 Nim POJ 2505 A原创 2017-07-23 01:11:28 · 1957 阅读 · 0 评论 -
错排公式 + 组合数学取mod板子
不带解释版的define ll long long intll D[maxn],fac[maxn],inv[maxn];void init(){ D[0] = 1; D[1] = 0; D[2] = 1; for(ll i=3;i<=maxn;i++){ D[i] = (i-1)*(D[i-1]+D[i-2]) % mod; } fac[0] =原创 2017-07-24 00:04:20 · 542 阅读 · 0 评论 -
KM(带权最大二分匹配) 模板
板子:const int maxn=300+5;int g[maxn][maxn];int link[maxn],lx[maxn],ly[maxn];bool visx[maxn],visy[maxn];int nx,ny,d;bool Find(int x){ visx[x] = true; for(int i=1;i&amp;amp;amp;amp;lt;=ny;i++){ if(visy原创 2017-08-02 10:28:40 · 560 阅读 · 0 评论 -
数位DP 板子
//重点在于找到dp的状态, 每一维代表什么, 如何去筛选, 和前导零的影响. 贴一个常用板子: (记忆化搜索板子)/** @Cain*/int dp[10][sta];int a[10];int dfs(int pos,int sta,bool limit) //limit 就是为了限制当前位是否是最高位.{ if(pos == 0) return 判断条件; //这个一般跟根原创 2017-07-25 10:50:41 · 636 阅读 · 0 评论 -
后缀数组 (板子)
存一个板子… 好难呀 题目是求一个字符串有多少中不同的字串.char s[maxn];int sa[maxn], t[maxn], t2[maxn], tt[maxn], c[maxn], ss[maxn];int Rank[maxn], height[maxn];bool cmp(int *r, int a, int b, int l) { return r[a] ==...原创 2018-07-30 09:05:07 · 302 阅读 · 0 评论