自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 P4173 残缺的字符串(单模式字符串匹配FFT)

P4173题目描述题解代码#include<cmath>#include<cstdio>#include<climits>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;int read(){ int f=1,re=0;char ch; for(ch=getcha

2020-07-31 21:36:23 183

原创 P3723 礼物(FFT)

P3723 礼物题目描述题解代码#include <cmath>#include <cstdio>#include <climits>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#define ll long longusing namespace std;const int M

2020-07-31 21:09:00 152

原创 P3338-力(FFT)

P3338 力题目描述题解代码#include <cmath>#include <cstdio>#include <climits>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;const int M=4e5+9;const double p

2020-07-31 20:23:17 154

原创 多项式快速幂

多项式快速幂已知A(x)A(x)A(x),求使得B(x)≡A(x)k(modxn)B(x)\equiv{A(x)^k}\pmod{x^n}B(x)≡A(x)k(modxn)两边先取对数(换底公式),再exp回来ln⁡B(x)≡kln⁡A(x)(modxn)B(x)=ekln⁡A(x)(modxn)\ln B(x)\equiv{k\ln A(x)}\pmod{x^n}\\B(x)=e^{k\ln A(x)}\pmod{x^n}lnB(x)≡klnA(x)(modxn)B(x)=eklnA(x)(m

2020-07-30 20:55:13 221

原创 多项式对数函数(ln)

多项式对数函数(ln)已知A(x)A(x)A(x),求使得B(x)=ln⁡A(x)B(x)=\ln A(x)B(x)=lnA(x)的B(x)B(x)B(x)考虑先求导,后积分B′(x)=A′(x)A(x)B(x)=∫A′(x)A(x)dxB'(x)=\frac{A'(x)}{A(x)}\\B(x)=\int\frac{A'(x)}{A(x)}dxB′(x)=A(x)A′(x)​B(x)=∫A(x)A′(x)​dx附上求导和积分的公式A′(x)=∑(i+1)aixi∫A(x)dx=∑ai−1i

2020-07-30 20:42:09 772

原创 多项式开根

多项式开根已知A(x)A(x)A(x),求使得B(x)2≡A(x)(modxn)B(x)^2\equiv{A(x)\pmod{x^n}}B(x)2≡A(x)(modxn)的B(x)B(x)B(x)类似求逆,考虑倍增。假设当前已知B′(x)2≡A(x)(modxn2)B'(x)^2\equiv{A(x)}\pmod{x^{\frac{n}{2}}}B′(x)2≡A(x)(modx2n​)(B′(x)2−A(x))2≡0(modxn)B′(x)4−2B′(x)2A(x)+A(x)2≡0(modxn)B′

2020-07-30 20:28:37 346 1

原创 多项式除法

多项式除法(取模)已知次数为nnn的A(x)A(x)A(x),次数为mmm的B(x)B(x)B(x),求使得A(x)=B(x)C(x)+D(x)A(x)=B(x)C(x)+D(x)A(x)=B(x)C(x)+D(x)的C(x),D(x)C(x),D(x)C(x),D(x)由题C(x)C(x)C(x)的次数为n−mn-mn−m,D(x)D(x)D(x)的次数为m−1m-1m−1考虑将系数颠倒过来。记AR(x)=xnA(1x)A^R(x)=x^nA(\frac{1}{x})AR(x)=xnA(x1​)

2020-07-30 20:12:30 590

原创 多项式求逆

多项式求逆板子 P4238已知A(x)A(x)A(x),求使得A(x)B(x)≡1(modxn)A(x)B(x)\equiv 1 \pmod{x^n}A(x)B(x)≡1(modxn)的B(x)B(x)B(x)考虑倍增。假设当前已得到B′(x)B'(x)B′(x),满足A(x)B′(x)≡1(modxn)A(x)B'(x)\equiv 1 \pmod{x^n}A(x)B′(x)≡1(modxn)A(x)B′(x)−1≡0(modxn2)(A(x)B′(x)−1)2≡0(mod2n)A(x)2B′(

2020-07-30 19:52:53 149

原创 多项式全家桶

#include<bits/stdc++.h>#define ll long long using namespace std;const int g=3;const int mod=998244353; const int M=2100009;char s;int read(){ int f=1,re=0;char ch; for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar()); if(ch=='-'){f=

2020-07-30 19:36:50 135

原创 POJ2778-AC自动机,矩阵快速幂优化DP

POJ2778题目描述简要题意:给出mmm个病毒串,问你由ATGCATGCATGC构成的长度为 nnn 且不包含这些病毒串的字符串有多少个?题解定义dp[i][j]=dp[当前长度为i][当前在AC自动机的第j个节点]=方案数dp[i][j]=dp[当前长度为i][当前在AC自动机的第j个节点]=方案数dp[i][j]=dp[当前长度为i][当前在AC自动机的第j个节点]=方案数.转移方程也十分简单.但是注意到nnn的大小,显然会T到飞起,考虑矩阵乘法优化,其实再转化一下题意就是:全图中的000

2020-07-30 13:47:32 207

原创 P2518-数位dp,哈希

P2518题目描述题解用has维护先前每个数的个数,然后直接套板子即可代码#include<bits/stdc++.h>#include<tr1/unordered_map>#define int long long#define ull unsigned long long#define M 100009using namespace std;tr1::unordered_map<ull,int>mp;const int h=31;int a

2020-07-27 21:59:36 181

原创 LOJ6109-可持久化无旋Treap

LOJ6109题目描述题解代码#include<bits/stdc++.h>#define LL long long#define M 30000009using namespace std;int read(){ int f=1,re=0; char ch; for(ch=getchar();!isdigit(ch)&&ch!='-';ch=g...

2020-07-27 21:18:18 167

原创 LOJ6100-主席树区间修改和查询,二进制,二分

LOJ6100题目描述题解该题大致思路便是:第一步 求出每一个点最远能保持单调不下降到哪个点(记为nxt[i]nxt[i]nxt[i])第二步 主席树区间修改build(rt[i−1],rt[i],1,n,i,nxt[i])build(rt[i-1],rt[i],1,n,i,nxt[i])build(rt[i−1],rt[i],1,n,i,nxt[i]),区间查询build(rt[l−...

2020-07-27 21:05:06 285

原创 P4070-后缀数组,ST表

P4070题目描述题解代码#include<bits/stdc++.h>#define int long long#define M 200009using namespace std;int read(){ int f=1,re=0;char ch; for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar()); if(ch=='-'){f=-1,ch=getchar();} for(;isdigit(ch);

2020-07-26 11:40:44 195

原创 P4248-后缀数组,单调栈

P4248题目描述题解代码#include<bits/stdc++.h>#define M 500009 #define int long longusing namespace std;int m,n,rk[M],tp[M],sa[M],tax[M],height[M],ans,q[M],num[M];char s[M];int getans(){ int l=1,r=0,cnt=n; for(int i=1;i<=n;i++) num[i]=(n-1)*i;

2020-07-26 11:32:07 156

原创 SP694-后缀数组

SP694题目描述题解代码#include<bits/stdc++.h>#define M 1000009#define int long longusing namespace std;int n,tax[M],height[M],rk[M],sa[M],tp[M],m;char s[M];void Qsort(){ for(int i=0;i<=m;i++) tax[i]=0; for(int i=1;i<=n;i++) tax[rk[i]]++; fo

2020-07-26 11:24:19 119

原创 HDU4758-AC自动机+状压dp

HDU4758题目描述题解代码#include<bits/stdc++.h>using namespace std;int f[105][105][305][4],tr[551][2],val[550],cnt,n,m,ans,fail[550],a[2],b[2],t;char s[150];const int mod=1000000007;void clear(){ cnt=ans=0; memset(tr,0,sizeof(tr)); memset(val,0,si

2020-07-26 11:14:11 135

原创 HDU3341-AC自动机+dp

HDU3341题目描述题解代码#include<bits/stdc++.h>//细节较多 using namespace std;int tr[505][5],val[505],fail[505],has[41][41][41][41],dp[505][15009],n,ans,tot,cnt,num[5],a[5];char s[50]; void clear(){ tot=cnt=ans=0; memset(tr,0,sizeof(tr)); memset(val,0,

2020-07-26 10:57:32 151

原创 HDU2825-AC自动机+状压dp

HDU2825题目描述题解代码#include<bits/stdc++.h>using namespace std;int dp[28][110][1<<10],tr[110][26],val[110],cnt,n,m,kk,ans,fail[110];char s[15];const int mod=20090717;void clear(){ cnt=ans=0; memset(tr,0,sizeof(tr)); memset(val,0,sizeof(v

2020-07-26 10:51:33 205

原创 P1962-矩阵快速幂板子

#include<bits/stdc++.h>#define int long longusing namespace std;int read(){ int f=1,re=0;char ch; for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar()); if(ch=='-'){f=-1,ch=getchar();} for(;isdigit(ch);ch=getchar()) re=(re<<3)+(re

2020-07-25 21:38:32 138

原创 200723-省选模拟4

省选模拟4T1题目描述题解O(n2)dpO(n^2)dpO(n2)dp方程很好写出来f[i]f[i]f[i]表示当前选到第iii个数的最大分数转移方程为:f[i]=max(f[i],f[j]+val[i])[i−t[i]>=j,i−t[j]>=j]f[i]=max(f[i],f[j]+val[i])[i-t[i]>=j,i-t[j]>=j]f[i]=max(f[i],f[j]+val[i])[i−t[i]>=j,i−t[j]>=j]考虑怎么优化考虑第二个条

2020-07-24 09:09:36 150

原创 后缀数组板子

#include<bits/stdc++.h> using namespace std;const int MAXN=1000005;char ch[MAXN],All[MAXN];int SA[MAXN],rank[MAXN],Height[MAXN],tax[MAXN],tp[MAXN],a[MAXN],n,m; char str[MAXN];//rank[i] 第i个后缀的排名; SA[i] 排名为i的后缀位置; Height[i] 排名为i的后缀与排名为(i-1)的后缀的

2020-07-22 16:03:03 162

原创 AC自动机板子

#include<bits/stdc++.h>//P3808 #define M 1000007using namespace std;int trie[M][26],cnt,val[M],last[M],fail[M],n;char s[M];void build(){ int u=0; int len=strlen(s); for(int i=0;i<len;i++){//建立trie树 int c=s[i]-'a'; if(!trie[u][c]) trie

2020-07-22 10:39:33 142

原创 P1896-状压dp

P1896题目描述题解与普通的状压dp几乎相同,只是多了一维来存储选的个数初始化:f[0][1][0]=1f[0][1][0]=1f[0][1][0]=1代码#include<bits/stdc++.h>#define int long long#define M 100009using namespace std;int read(){ int f=1,re=0;char ch; for(ch=getchar();!isdigit(ch)&&ch!='

2020-07-21 11:00:50 160

原创 P2051-线性dp

P2051题目描述题解1.第iii行什么都不放。f[i][j][k]=f[i][j][k]+f[i−1][j][k]f[i][j][k]=f[i][j][k]+f[i-1][j][k]f[i][j][k]=f[i][j][k]+f[i−1][j][k]2.放1个在空的列。空的列是m−j−km-j-km−j−k。f[i][j][k]=f[i][j][k]+f[i−1][j−1][k]×(m−(j−1)−k)f[i][j][k]=f[i][j][k]+f[i−1][j−1][k]×(m−(j−1)

2020-07-21 10:57:24 137

原创 UVA11825-状压dp,枚举子集

UVA11825题目描述题解g[i]g[i]g[i]表示选择iii对应的子集的电脑,所覆盖的电脑f[i]f[i]f[i]表示只选择iii对应的子集中的电脑,最多分成几组那么状态转移方程为if(g[j]==((1<<n)-1)) f[i]=max(f[i],f[i^j]+1);代码#include<bits/stdc++.h>#define M 100009using namespace std;int read(){ int f=1,re=0;char c

2020-07-21 10:51:09 217

原创 状压dp基础习题

状压dp基础习题常见位运算操作例题T1 HDU1565(基础状压dp)题解非常基础的一道状压dp我们用二进制来表示每一行取数情况,111表示取,000表示不取很容易得到状态转移方程:f[i][j]=max(f[i][j],f[i−1][k]+ans[i][j]);f[i][j]=max(f[i][j],f[i-1][k]+ans[i][j]);f[i][j]=max(f[i][j],f[i−1][k]+ans[i][j]);当且仅当jjj&k==0k==0k==0时代码#inc

2020-07-21 10:45:14 336

原创 200718-省选模拟2

省选模拟2T1题目描述题解咕咕咕T2题目描述题解咕咕咕T3题解由于具有一一对应的关系,所以将图转换为序列。1,独立集对应在序列中, 一定是上升子序列2,覆盖集对应在序列中,那么没被选择在覆盖集中的点一定与覆盖集中至少一个点连有边。那么该点要么比前面选择的点小,要么比后面选择的点大于是考虑dp解决,类似于求最长上升子序列,不过转移要满足两个条件代码#include<bits/stdc++.h>#define M 1009using namespace

2020-07-18 16:09:50 127

原创 P6371-数位dp,分类计算

P6371题目描述题解分两种情况1,x<=1e5x<=1e5x<=1e5,数位dp(注意前导零)2,x>1e5x>1e5x>1e5,因为A/k<B/k<1e6A/k<B/k<1e6A/k<B/k<1e6,所以枚举kkk的倍数,判断是否合法代码#include<bits/stdc++.h>#define int long longusing namespace std;int dp[20][100002]

2020-07-17 16:15:04 133

原创 P2602-数位dp

P2602题目描述题解分别计算每一个数字,数位dp代码#include<bits/stdc++.h>#define int long longusing namespace std;int dp[20][20],a[100],n,m;int read(){ int f=1,re=0;char ch; for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar()); if(ch=='-'){f=-1,ch=getc

2020-07-17 16:08:39 221

原创 P4127-数位dp

P4127题目描述题解考虑枚举数字和,然后进行数位dp代码#include<bits/stdc++.h>#define int long longusing namespace std;int dp[20][200][200],a[100],n,m;int read(){ int f=1,re=0;char ch; for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar()); if(ch=='-'){f=-1

2020-07-17 16:04:58 138

原创 数位dp模板

数位dp模板代码(HDU2089)#include<bits/stdc++.h>using namespace std;int dp[100][2],a[100],n,m;int read(){ int f=1,re=0;char ch; for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar()); if(ch=='-'){f=-1,ch=getchar();} for(;isdigit(ch);ch=getchar

2020-07-17 16:00:29 130

原创 200716-省选模拟1

200716-省选模拟1T1题解老套路了维护左端nnn的个数L[i]L[i]L[i],右端iii的个数R[i]R[i]R[i]ans=∑i=lr[s[i]==′o′](L[i]−L[l−1])(R[i]−R[r+1])ans=\sum_{i=l}^r[s[i]=='o'](L[i]-L[l-1])(R[i]-R[r+1])ans=∑i=lr​[s[i]==′o′](L[i]−L[l−1])(R[i]−R[r+1])拆开维护四个前缀和即可代码#include<bits/stdc++.h

2020-07-16 16:12:02 163

空空如也

空空如也

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

TA关注的人

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