
ACM_模板
呆雁1707
这个作者很懒,什么都没留下…
展开
-
BZOJ 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
原题链接:传送门Input输入文件第一行包含两个正整数N和M。N为袜子的数量,M为小Z所提的询问的数量。接下来一行包含N个正整数Ci,其中Ci表示第i只袜子的颜色,相同的颜色用相同的数字表示。再接下来M行,每行两个正整数L,R表示一个询问。Out包含M行,对于每个询问在一行中输出分数A/B表示从该询问的区间[L,R]中随机抽出两只袜子颜色相同的概率。若该概率为0则输...原创 2018-07-23 17:02:09 · 211 阅读 · 0 评论 -
几种常用求素数方法
6n+1法 判断素数#include <bits/stdc++.h>using namespace std;bool isprime(int n){ //判断素数 double n_sqrt = double(sqrt(n)); if(n == 1) return false; if(n==2 || n==3) ...原创 2018-11-14 21:41:31 · 2086 阅读 · 0 评论 -
LightOJ - 1214 Large Division(高精度取模)
原题链接:传送门题意:给你两个数a和b,问你a是否能整除b。(-10200 ≤ a ≤ 10200),b是32位有符号整型。思路:用一个数1234举例,可以写成 ( ( ( ( (1 * 10) + 2) * 10) + 3 ) * 10 ) + 4,而根据(m+n)%Mod = (m%Mod) + (n%Mod) ) % Mod,可以求出b是否可被a整除#include <bit...原创 2018-11-15 10:41:52 · 286 阅读 · 0 评论 -
POJ - 2478 Farey Sequence (欧拉函数)
原题链接:传送门题意:给你一个函数 F(),F(n) 就是 1-n 之内两个数 gcd(a,b) = 1 的总个数。思路:很显然,是求欧拉函数的。F(n) = F(n-1) + phi[i],直接套欧拉函数模板。// #include <bits/stdc++.h>#include <iostream&amp原创 2018-11-27 21:00:40 · 173 阅读 · 0 评论 -
POJ - 2409 Let it Bead (Polya计数)
原题链接:传送门/* Polya定理c种颜色染 n个对象方案数 L = 1/n * (∑(c^g)) g是置换gi的循环节数置换分为旋转和翻转两种方式旋转i格时,循环节为 gcd(n,i)翻转时要考虑n的奇偶,n为奇数时:循环节为(n+1)/2 * 循环群 n 个n为偶数时(举正方形):循环群有两类,按边中点 循环节为 n/2 * 循环群 n/2按对角线 循环节数为 ...原创 2018-12-09 20:30:01 · 186 阅读 · 0 评论 -
中国剩余定理
求解一元线性同余方程组:这里要求mi两两互质。令 M = m1 * m2 * m3 *···* mk,中国剩余定理说明:假设整数m1,m2, … ,mn两两互质,则对任意的整数:a1,a2, … ,an,方程组 (S) 有解,并且通解可以用如下方式构造得到:设 M = m1 * m2 * ···* mn 是整数m1,m2, … ,mn的乘积,并设 Mi = M/mi, 是除了mi以外的n...原创 2018-12-25 15:16:58 · 160 阅读 · 0 评论 -
两种方法求欧拉函数
直接求法:#include <bits/stdc++.h>using namespace std;typedef long long ll;ll Eular(ll n){ ll res = n; for(int i=2;i*i<=n;i++){ if(n%i == 0) res = res/i*(i-1); //先除后乘防止中间数据溢出...原创 2019-01-23 17:23:50 · 463 阅读 · 0 评论 -
欧拉降幂
降幂公式:ABmodC = ABmodφ[C]+φ[C]modC(降幂公式中 phi[] 为欧拉函数)// https://ac.nowcoder.com/acm/contest/330/E#include &lt;bits/stdc++.h&gt;using namespace std;const int Mod = 1e9+7;typedef long long ll;char...原创 2019-03-02 23:04:44 · 327 阅读 · 0 评论 -
不凡的夫夫 斯塔林公式求阶乘位数
https://ac.nowcoder.com/acm/contest/75/A题意:求解 n! 在八进制下的位数。一个整数n的位数的计算方法为:log10(n)+1n=10m故n的位数为 m = log10(n!)+1如12345 = 1.2345*104,那么(int)log10(12345) = 4,再加上1就是这个数的位数。那么对于 n! 的八进制数的位数长度,log8n! ...原创 2019-03-02 23:01:36 · 278 阅读 · 0 评论 -
51Nod 1057 n的阶乘
http://www.51nod.com/Challenge/Problem.html#!#problemId=1057正常的可以直接通过模拟来求阶乘,用一个数组保存阶乘的每一位。但是当n太大的时候,就不行了。所以这里用每8位进位的方法,就是数组中的每一个数都保存8位数,超过八位数才进位。#include &lt;iostream&gt;#include &lt;cstdio&gt;#...原创 2019-03-03 17:47:32 · 195 阅读 · 0 评论 -
HDU-2544 最短路(dijkstra 邻接矩阵存图、链式前向星存图、链式前向星+优先队列)
链式前向星+优先队列#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int N = 1e4+5;const int Inf = 0x3f3f3f3f;int vis[N],dis[N];in...原创 2019-03-22 11:32:52 · 338 阅读 · 0 评论 -
快速乘&&快速幂
快速幂ll kpow(ll a,ll b){ ll res = 1,base = ans; while(b){ if(b&1) res = res * base % Mod; base = base * base % Mod; b >>= 1; } return res;}快速乘时...原创 2019-04-04 11:37:24 · 156 阅读 · 0 评论 -
万能大数通用模板
如题,这个是个万能的大数模板,使用时只要定义个BigInteger n,然后这个n就可以按整型来操作了,平时写题很方便。//大数struct BigInteger{ static const int BASE = 100000000; //和WIDTH保持一致 static const int WIDTH = 8; //八位一存储,如修改记得修改输出中的%08d...原创 2019-04-11 13:55:54 · 212 阅读 · 6 评论 -
P3811 【模板】乘法逆元
原题链接:https://www.luogu.org/problemnew/show/P3811#include <bits/stdc++.h>using namespace std;typedef long long ll;ll inv[3000006];int n,p;int main(){ scanf("%d%d",&n,&p); i...原创 2019-04-17 21:14:38 · 217 阅读 · 0 评论 -
51Nod 1021 石子归并 (区间dp)
原题链接:https://www.51nod.com/Challenge/Problem.html#!#problemId=1021#include <bits/stdc++.h>using namespace std;const int maxn = 110;int dp[maxn][maxn];int a[maxn];int sum[maxn];int n;int...原创 2019-07-05 11:35:52 · 195 阅读 · 0 评论 -
拓展欧几里得
#include &amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;amp;amp;amp;lt;cstring&amp;amp;amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;amp;amp;amp;lt;cstdio&a原创 2018-10-25 20:27:15 · 153 阅读 · 0 评论 -
HDU 1166 敌兵布阵(树状数组 || 线段树)
原题链接:传送门刚学了树状数组,还是补一篇博客吧。树状数组版:#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;cstdio&gt;#define lowbit(x) x&amp;-xusing namespace std;const int N = 50005;int tree[N];int原创 2018-07-18 08:54:45 · 159 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树区间更新)
原题链接:传送门题意:有n个数,m次操作。输一个字符,当字符为Q时,查询a到b的总和,为C时表示从a到b加上c。简单区间更新。#include &amp;lt;iostream&amp;gt;#include &amp;lt;cstring&amp;gt;#include &amp;lt;cstdio&amp;gt;#define lson l,m,rt&amp;lt;&am原创 2018-07-18 18:24:25 · 149 阅读 · 0 评论 -
POJ 1088 滑雪(记忆化搜索)
原题链接:传送门题意:在一片雪地,能从高处滑到低处。问一次最多可以划多远的距离。记忆化搜索的入门题。#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 105;int Map[N][N],dp[N][N];int...原创 2018-07-19 17:03:23 · 136 阅读 · 0 评论 -
NYOJ-138 找球号(二) (哈希)
原题链接:传送门这道题我最开始是用的map标记来写的,但写完后发现TLE了,后来看别人的题解才知道是要用哈希来做,就学了一下哈希。但还是不太明白,为啥map标记会超时??这里贴个用map写的TLE了的代码。。#include &amp;lt;iostream&amp;gt;#include &amp;lt;cstring&amp;gt;#include &amp;lt;cstdio&amp;g原创 2018-07-09 18:25:11 · 145 阅读 · 0 评论 -
NYOJ-117 求逆序数(归并排序)
#include &amp;lt;iostream&amp;gt;#include &amp;lt;cstring&amp;gt;#include &amp;lt;cstdio&amp;gt;typedef long long ll;const int N = 1000005;ll A[N],B[N];ll ans,n;void Merge(ll A[],ll l,ll m,ll r){原创 2018-07-07 09:34:47 · 199 阅读 · 0 评论 -
Miller–Rabin(米勒拉宾求大素数)
首先需要知道两个定理:1: 费马小定理: 假如p是素数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p)。2:二次探测定理:如果p是素数,x是小于p的正整数,且,那么要么x=1,要么x=p-1。 证明:这是显然的,因为相当于p能整除,也即p能整除(x+1)(x-1)。 由于p是素数,那么只可能是x-1能被p整除(此时x=1) 或 x+1能被p整除(此时x=p-1)。...原创 2018-07-13 15:22:28 · 740 阅读 · 0 评论 -
矩阵快速幂
51nod 1242 斐波那契数列的第N项 NYOJ - 148 fibonacci数列(二) NYOJ - 301 递推求值矩阵相乘满足结合律(A*B)*C = A*(B*C) (矩阵相乘模板)让原矩阵R乘加速矩阵base的n次方 由此可以与数的快速幂结合 就是矩阵快速幂。 矩阵快速幂的关键是构造。 只要能够构造出原矩阵和基数矩阵,题就解了。 构造时根据递推公...原创 2018-05-03 16:44:18 · 202 阅读 · 0 评论 -
PSD面试 (LPS最长回文子序列)
题目链接传送门这道题主要就是求最长回文子序列(LPS)的。最长回文子序列状态转移方程:if(a[i] == a[j]) dp[i][j] = dp[i+1][j-1];if(a[i] != a[j]) dp[i][j] = max(dp[i][j-1],dp[i+1][j]);这里我用表格模拟了查找“google”和“banana”两个单词的最长回文子序列。...原创 2018-03-28 10:54:18 · 324 阅读 · 0 评论 -
NYOJ--17 、214单调递增子序列
NYOJ—17 单调递增最长子序列(DP)原题链接传送门 这是一道LIS(单调递增最长子序列)模板题。#include &lt;cstdio&gt;#include &lt;cstring&gt;using namespace std;int dp[10005];char a[10005];int Max;void LIS() { int len ...原创 2018-04-02 12:28:53 · 205 阅读 · 1 评论 -
Manacher(马拉车)算法详解
原文链接传送门 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;马拉车用于解决最长回文子串问题,重点是子串,而不是子序列,想了解最长回文子序列的可以看下这篇博客传送门。对于这种问题,当然最简单粗暴的方法就是暴力求解,但太暴力也不好,毕竟会TLE。所以对于求最长回文子串的问题有一种神奇的算法——马拉车算法,神奇就神奇在时间复杂度为O(n)。&转载 2018-03-30 21:13:18 · 25506 阅读 · 11 评论 -
__gcd()
在翻别人的题解的时候偶然发现了这个函数,然后就去查了查,但是相关内容不多,__gcd(x,y);好像是GNU的内部函数,不是一个标准库里的函数,我也不太了解,平时写题直接用这个函数挺方便的,当然也可以手写gcd函数,它头文件是&lt;algorithm&gt;。#include &lt;iostream&gt;#include &lt;algorithm&gt;using namesp...转载 2018-07-14 10:56:33 · 9675 阅读 · 0 评论 -
NYOJ 119 士兵杀敌(三)(RMQ)
原题链接:传送门RMQ(区间最值问题)模板题。。#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int N = 1e5+10;int Max[N][20],Min[N][20];v...原创 2018-07-20 10:38:55 · 117 阅读 · 0 评论 -
NYOJ 123 士兵杀敌(四)(树状数组区间更新)
原题链接:传送门#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;cstdio&gt;using namespace std;const int N = 1e6+10;int tree[N];int n,t;void Add(int k,int num) { while(k &lt;= n)原创 2018-07-20 14:53:32 · 137 阅读 · 0 评论 -
HDU 2884 Coins (多重背包)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844多重背包模板题,就是他让求的是不大于m的钱数有多少种(多种方案钱数相同算一种),开个数组标记一下就好了。#include <bits/stdc++.h>using namespace std;const int maxn = 110000;int dp[maxn];int ...原创 2019-07-05 10:00:42 · 214 阅读 · 0 评论