自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 1465 :不容易系列之一(错排问题,二项式反演)

从题意来看,就是求 n 个人的错排方案数。考虑递推的方法:nnn 个人错排,nnn 一定不在自己位置上,考虑 nnn 站在 其它 n−1n - 1n−1 个人中某一个人的位置,显然这样能将所有情况分成不相交的情况。假设 nnn 站在了 iii 的位置上,那么根据 iii 是否站在 nnn 的位置上可以再将情况分成两种:1:iii 不在 nnn 的位置上,这相当于 n−1n - 1n−1个...

2019-09-27 21:17:39 379

原创 洛谷 P4827 [国家集训队] Crash 的文明世界(第二类斯特林数 + 树形DP + 思维)

代码:#include<bits/stdc++.h>using namespace std;const int maxn = 5e4 + 100;const int mod = 10007;int n,k;vector<int> g[maxn];int S[300][300],dp[maxn][300],pw[maxn];int cur[300];v...

2019-09-27 00:31:04 162

原创 Codeforce 961 G. Partitions(第二类斯特林数 + 思维)

题目大意:定义一个集合 SSS 的权值 W(S)W(S)W(S):∣S∣∑i∈Sw[i]|S|\sum_{i \in S}w[i]∣S∣∑i∈S​w[i]将 n 个元素的集合划分成 k 个子集,对所有的划分情况,对这些子集和求W(S)W(S)W(S)之和最容易想到的解法:枚举每一个元素w[i]w[i]w[i]的贡献,那么只需要枚举这个元素所在集合的大小即可。可以得到一个答案式子:re...

2019-09-26 21:49:26 320

原创 Codeforce 960 G. Bandit Blues(第一类斯特林数 + 分治 + NTT)

题目有点绕,原文大意是指:地上有 N个黄金袋,袋子重量是一个[1,n]的排列,有一个人在捡黄金,初始时他没有黄金,当他开始捡黄金时,如果当前地上的黄金比他的已有的重,他会捡起地上的丢掉已有的。然后已知是如果他从前往后捡他会捡A次,从后往前捡他会捡B次,问有多少个排列题意转化过来就是,从前往后遍历有A个元素是前缀最大值,从后往前遍历有B个元素是后缀最大值。问这样的排列有多少种。首先要考虑...

2019-09-26 17:14:57 226

原创 Codeforce 932 E. Team Work(第二类斯特林数)

题目大意:让你求∑i=1nC(n,i)∗ik\sum_{i = 1}^nC(n,i)*i^k∑i=1n​C(n,i)∗ik第二类斯特林数可以用[n]0,[n]1,[n]2,..,[n]p[n]_0,[n]_1,[n]_2,..,[n]_p[n]0​,[n]1​,[n]2​,..,[n]p​写出 npn^pnp[n]k=n∗(n−1)∗(n−2)∗..∗(n−k+1)[n]_k = n *...

2019-09-26 10:52:30 152

原创 洛谷 P4091:[HEOI2016/TJOI2016]求和(第二类斯特林数 + NTT)

由于 当j>i时,S(i,j)=0当 j > i时,S(i,j) = 0当j>i时,S(i,j)=0;∴∑i=0n∑j=0iS(i,j)∗2j∗(j!)\sum_{i = 0}^n\sum_{j = 0}^iS(i,j) * 2^j *(j!)∑i=0n​∑j=0i​S(i,j)∗2j∗(j!) = ∑i=0n∑j=0nS(i,j)∗2j∗(j!)\sum_{i = 0}^...

2019-09-25 18:30:41 180

原创 Codeforce 1230 E. Kamil and Making a Stream(dfs,暴力,数论)

题目大意:给一棵 n 个点的树,每个点有一个点权,定义 f(u,v):f(u,v):f(u,v): uuu 是 vvv 的祖先,uuu -> vvv路径上所有点权的 gcdgcdgcd。让你求 ∑f(u,v)\sum f(u,v)∑f(u,v)从根节点往下跑,gcd肯定越来越小,并且一条链上只有 log⁡\loglog 个不相同的gcdgcdgcd,因为 gcdgcdgcd 减小的...

2019-09-24 17:57:02 289

原创 2019 南昌网络赛 H. The Nth Item(齐次线性递推 + 快速幂分块打表)

这是二阶齐次递推式,一个做法是用矩阵快速幂,复杂度为 O(8∗q∗log⁡(109))O(8 * q * \log (10^9))O(8∗q∗log(109)),T飞。对于齐次线性递推式,可以推导它的通项公式:令 F(n)=xnF(n) = x^nF(n)=xn:F(n)−3∗F(n−1)−2∗F(n−2)=0F(n) - 3 * F(n - 1) - 2 * F(n - 2) = 0F(...

2019-09-24 11:37:26 140

原创 2019 南昌网络赛 I. Yukino With Subinterval(CDQ 分治)

题目大意:有一个数组,支持单点修改:将第 i 个位置的值变成 v。让你查询[L,R]区间内,值域在[x,y] 范围内,连续的段数,连续的段数指值相同位置连续的一段,并且连续段的长度在[L,R]内必须尽可能的长。先对数组预处理,将连续的段缩到左端点,即新建一个数组 b, 若 a[i]!=a[i−1]a[i] != a[i - 1]a[i]!=a[i−1],则b[i]=1b[i] = 1b[i...

2019-09-23 14:49:12 151

原创 gym 101964:K - Points and Rectangles(CDQ分治)

题目大意:二维平面上,有 q 个操作,每个操作有两种类型:1:在(x,y)坐标添加一个点2:添加一个矩形区域:左下角是(x1,y1),右上角是(x2,y2)对于每一个操作,输出有多少个pair:(矩形区域,点对) ,点对被包含在矩形区域中。如果当前操作是添加一个矩形区域,答案 = 前面所有矩形区域的答案之和 + 当前矩形区域包括的点的个数。如果当前操作是添加一个点,答案 = 前面所有的...

2019-09-23 12:20:11 245

原创 HDU 1521:排列组合(指数型生成函数 + 暴力拆解)

题目大意:有 n 种物品,每种物品有一个数量,让你从中选一些物品构造 m 排列,输出排列数量。参考:https://wenku.baidu.com/view/846bb51bce84b9d528ea81c758f5f61fb7362892.html直接构造生成函数:(1+x+x22!+...+x1aa1!)∗(1+x+x22!+...+x2aa2!)∗..∗(1+x+x22!+...+xna...

2019-09-23 00:24:38 557

原创 POJ 3734 :Blocks(指数型生成函数)

题目大意:有一排砖头要上色,有四种颜色,其中两种用的数量必须是偶数,另外两种不限制用的数量,四种颜色的都有无限量的存储,求涂色方案。题解:指数型生产函数裸题#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 10007;ll fpow(ll a,ll b) { ...

2019-09-22 19:25:46 225

原创 gym 101889 :G.Gates of uncertainty(树形dp)

题目大意:有一堆逻辑门,它的逻辑满足下图一堆逻辑门构成的一个逻辑图是一个树形图(显然),例如:现在有些逻辑门出现了故障,有些逻辑门固定输出1,有些逻辑门固定输出0。求有多少种输入对应的输出是不正确的?这个题显然可以用树形DP做,先考虑最后答案怎么得到:用根节点原本要输出 0,但实际上输出1的输入数量(下面称它为错误输出 1)加上 原本要输出1实际输出0的输入数量(称它为错误输出 0)。...

2019-09-21 21:38:21 177

原创 牛客挑战赛 C.斐波那契数列卷积 (矩阵快速幂 | 线性递推BM模板)

做法有两种:一种是直接用BM黑科技,如果知道递推式,BM可以只输入这个线性递推式的阶数个值,可以多但不能少。第二种做法就是矩阵快速幂:去求ana_nan​的递推式,然后用矩阵快速幂去算。#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#in...

2019-09-21 11:17:48 214

原创 牛客挑战赛 32 :D 放物品(错排问题 + 分类讨论)

直接枚举每一对点,计算贡献以及有效贡献次数。会发现,贡献是一个等差数列的求和形式,可以预处理出来然后求和。贡献次数这里要分类讨论,设当前处理点对是 i,j1:i 占了 j 的位置,j也占了 i 的位置。贡献次数:d[n][0]2:i 占了 j 的位置,或 j 占了 i 的位置。贡献次数:d[n][1]3:i 不占 j 的位置,j 也不占 i 的位置。贡献次数:d[n][2]d[n]...

2019-09-21 10:45:41 192

原创 HDU 1085 : Holding Bin-Laden Captive! (生成函数 | 背包)

题目大意:有面值 1,2,5的硬币 n1,n2,n5n_1,n_2,n_5n1​,n2​,n5​枚,输出不能用这些硬币凑出的金额中最小的金额。有两种做法,一种是直接转01背包,由于数据范围较小可以直接暴力转,复杂度为 (3000∗8000)(3000 * 8000)(3000∗8000)另一种做法:e1+2∗e2+5∗e5=ie_1 + 2*e2 + 5 * e_5 = ie1​+2∗e...

2019-09-20 14:27:35 180

原创 HDU 1028 Ignatius and the Princess III(生成函数)

题目大意:让你把 n 拆成几个数字相加,有几种方案。4 = 3 + 1 和 4 = 1 + 3 是同一种方案有一种 dp 的做法,首先我们让所用数字按升序来排,dp[i][j] 表示凑出 i,最大的那个是 j 的方案。转移方程类似背包dp。第二种做法是生成函数:转化题意,相当于让你求 1∗e1+2∗e2+3∗e3+...+n∗en=n1*e_1 + 2 * e_2 + 3 * e_3 +...

2019-09-20 10:40:35 144

原创 2019 沈阳网络赛 E. Gugugu's upgrade schemes(贝尔数 | Touchard同余)

贝尔数:https://www.cnblogs.com/yuyixingkong/p/4480349.html利用Touchard同余性质,Bn+p=(Bn+Bn+1)mod  p(p∈prime)B_{n + p} = (B_n + B_{n + 1}) \mod p (p \in prime)Bn+p​=(Bn​+Bn+1​)modp(p∈prime)当 n 较小时可以用贝尔数的计算式...

2019-09-19 23:42:06 472

原创 2019 南昌网络赛 D. Interesting Series(生成函数 + 分治 + FFT)

代码:#include<iostream>using namespace std;#include<stdio.h>#include<string.h>#include<algorithm>#define double long doubletypedef long long ll;const double pi = acos(...

2019-09-19 21:11:34 264

原创 2019 上海网络赛 C. Triple (FFT + 暴力)

题目大意:如果对Ai,Bj,CkA_i ,B_j,C_kAi​,Bj​,Ck​排序,使得Ai,Bj,CkA_i ,B_j,C_kAi​,Bj​,Ck​恰好是升序,要满足的条件为:Ck−Bj≥AiC_k - B_j \geq A_iCk​−Bj​≥Ai​,这个定义类似于从A,B,CA,B,CA,B,C数组中各取一个数,使得能构成三角形,但是注意这里是可以等于的。对于这种题有一个FFT的做法:通...

2019-09-17 20:44:04 228

原创 2019 上海网络赛 F. Rhyme scheme(dp + 线性构造)

题目大意:用字符表示集合划分,例如 AABBA 表示 1,2,5划分一个集合,3,4划分一个集合,输入 n,k,用字母表示 n 个人的集合划分,输出字典序第 k 小的划分字符串。集合划分的数目是一个贝尔数,观察到如果前 i 个人划分出了 k 个集合,第 i + 1 个人有 k + 1种选择,要么归属 k 个集合中的一个,要么划分到一个新的集合。一个人的可选择方案数量只和前面的集合数量有关,并...

2019-09-17 00:35:58 451 2

原创 2019 上海网络赛 D. Counting Sequences I (dfs + 剪枝)

通过小范围数据打表会发现非1的数字个数非常有限,且最大数字不会超过 n。证明:假设存在一个数大于 n,让它尽量小,设为 n + 1,因为至少存在两个大于 1的数字,让令一个大于 1 的数字也尽量小,设为 2,可以计算出对应项:2 * (n + 1) - (n + 1 + 2) + 2 = n + 1,也就是说当存在一个数大于 n 时,最小的一项也会大于 n。那么直接暴力打表就完事了。按递增...

2019-09-16 21:52:18 137

原创 Loj #572. 「LibreOJ Round #11」Misaka Network 与求和(莫比乌斯反演 + 杜教筛 + min_25筛(递推版))

代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5 + 10;const ll mod = 1ll << 32;bool ispri[maxn];ll pri[maxn], num, tot;ll pw[maxn];ll g[...

2019-09-13 14:28:01 240

原创 Uoj 188.Sanrd(min_25筛次大质因数之和)

题目大意:让你求∑i=1nf(i)\sum_{i = 1} ^ nf(i)∑i=1n​f(i),f(i)f(i)f(i)为 iii 的次小质因数。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e6 + 10;bool ispri[maxn];in...

2019-09-13 11:23:52 296

原创 2019 南昌网络赛 C. Hello 2019(线段树 + dp)

直接拿 codeforce 750E的代码把字符串和询问都倒过来代码:#include<iostream>using namespace std;#include<stdio.h>#include<string.h>#include<algorithm>#define lson rt << 1,l,mid#defin...

2019-09-11 23:51:48 233 2

原创 Codeforce 750 E. New Year and Old Subsequence(线段树 + dp)

代码:#include<iostream>using namespace std;#include<stdio.h>#include<string.h>#include<algorithm>#define lson rt << 1,l,mid#define rson rt << 1 | 1,mid + 1,...

2019-09-11 23:50:04 145

原创 2019 徐州网络赛 H.function(min_25筛)

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6 + 10;const int mod = 998244353;ll inv2 = (mod+1)/2;ll w[maxn],g1[maxn],g2[maxn],id1[maxn],id2[maxn];...

2019-09-11 18:40:21 293

原创 2019 西安邀请赛 E. Tree(树链剖分 + 线段树 + 位运算 + nim博弈)

题目大意:一棵有 n 个结点的树,树根为 1 号点,每个点有一堆石头,数量为 aia_iai​,有三种操作:1 s t:将 1 -> s 路径上的石头数量或上 t2 s t:将 1 -> s 路径上的石头数量与上 t3 s t:用 1 -> s 路径上的石头外加一堆数量为 t 的石头玩 nim博弈,判断先手是否能赢操作 1 和操作2 对应两种修改操作操作3:相当于询...

2019-09-11 00:23:38 169

原创 2019 西安邀请赛 J. And And And(dfs处理同链贡献和不同链贡献)

题解:预处理每个点到根节点的路径异或和,记为 val[u]val[u]val[u],两个点对答案有贡献时这个点的valvalval相等。若val[u]=val[v]val[u] = val[v]val[u]=val[v],那么 u,vu,vu,v 对总答案的贡献就等于经过 u,vu,vu,v 的路径数根据 u,vu,vu,v 所在位置可以分为两种情况:1.u,vu,vu,v同链,即l...

2019-09-10 18:29:17 129

原创 2019 西安邀请赛 B. Product(莫比乌斯反演 + 杜教筛 + 欧拉降幂)

如图:求 ∏i=1n∏j=1n∏k=1nmgcd(i,j)[k∣gcd(i,j)]\prod_{i = 1}^n\prod_{j = 1}^n\prod_{k = 1}^nm^{gcd(i,j)[k | gcd(i,j)]}∏i=1n​∏j=1n​∏k=1n​mgcd(i,j)[k∣gcd(i,j)]把求和符号放到幂次就变成求和符号,幂次式子变成:∑i=1n∑j=1n∑k=1ngcd(i,j...

2019-09-10 14:07:16 297 4

原创 loj 6053 简单的函数(min_25筛模板)

25筛模板题使用min_25的三个条件:1.f(x)f(x)f(x) 是积性函数2.f(p)f(p)f(p) 是一个简单多项式,p是素数3.f(px)f(p^x)f(px) 容易求得(指O(1)O(1)O(1)时间内求得),p是素数min_25筛用来求一些积性函数的前缀和 ∑i=1nf(i)\sum_{i = 1}^nf(i)∑i=1n​f(i)其大致思想是:将答案拆成质数和合数部...

2019-09-09 21:59:02 236

原创 洛谷 P5325【模板】Min_25筛

参考博客:https://www.mina.moe/archives/12287https://www.luogu.org/blog/user54214/solution-p5325代码:#include<bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;const int maxn = 1e6 + ...

2019-09-09 12:21:55 189

原创 Codeforce 375 D. Tree and Queries (dsu on tree)

题目大意:(来源:https://www.luogu.org/problem/CF375D)询问的是子树内的问题,一种做法是搞出每个点的dfs序,然后直接树上莫队。还有dsu on tree的做法,维护一下每个颜色出现的次数,然后用线段树或树状数组之类的数据结构维护一下每个出现次数的颜色之和/#include<bits/stdc++.h>using namespace ...

2019-09-05 15:31:01 242

原创 Codeforce 1009 F. Dominant Indices (dsu on tree)

题目大意:(来源:https://www.luogu.org/problem/CF1009F)题意转化为:找一个最大的 d(x,j),如果有多个,找最小的那个。预处理一下每个点距离根节点的距离,可以O(n2)O(n^2)O(n2)暴力:暴力遍历以 xxx为根的整颗子树,维护xxx 子树里每个深度的点的个数,动态更新答案 resresres,最后xxx点的答案 = res−deep[x]re...

2019-09-05 14:22:48 151

原创 Codeforce 741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths (dsu on tree)

题目大意:(来源 : https://www.luogu.org/problem/CF741D)若排序后能变成一个回文串,则路径上最多只有一个字符出现奇数次,用0 1 表示每个字符出现是奇还是偶。dfs预处理每个点到根节点的所有字符出现状态 和 距离。当前点 为 i 时,最长路径要么经过 i,要么在 i 的子树中, 后者是一个子问题,可以用 dp 记录一下。考虑经过 i 的最长路径怎么解...

2019-09-05 13:07:23 391

原创 Codeforce 570 D. Tree Requests(dsu on tree)

做法有很多。重新排列之后构成回文串,相当于最多只有1个字符出现奇数次,由于只有26个字母,可以状压用 0 1表示每个字母出现是奇数次还是偶数次。先考虑暴力:显然可以将询问离线,可以暴力去维护每一个点作为根节点每一个深度的信息,然后回答这个点的所有问题。然后注意到一个点的信息可以由子节点合并得到,这里就可以用dsu on tree了。另外一种做法:对每个深度开一个桶,将点按dfs序存入对...

2019-09-05 10:47:05 126

原创 Codeforce 1182 E. Product Oriented Recurrence(递推 + 矩阵快速幂 + 欧拉降幂)

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 1e9 + 7;ll a[5][5],tmp[5][5],c[5][5],ans[5][5];ll b1[5][5],b2[5][5],b3[5][5];ll n,f1,f2,f3,C;void mul(ll a[...

2019-09-04 08:48:47 169

原创 2019 南昌邀请赛网络赛 G. tsy's number(莫比乌斯反演 + 线性筛)

题目大意:让你求:∑i=1n∑j=1n∑k=1nϕ(i)ϕ(j2)ϕ(k3)ϕ(i)ϕ(j)ϕ(i)ϕ(gcd(i,j,k))让你求:\sum_{i = 1}^n\sum_{j = 1}^n\sum_{k = 1}^n\frac{\phi(i)\phi(j ^ 2)\phi(k^3)}{\phi(i)\phi(j)\phi(i)}\phi(gcd(i,j,k))让你求:i=1∑n​j=1∑n​...

2019-09-03 20:34:17 199

原创 2019 南京网络赛 E. K Sum(莫比乌斯反演 + 杜教筛)

化简 fn(k)=∑l1=1n∑l2=1n...∑lk=1n(gcd(l1,l2,...,lk))2f_n(k)=\sum_{l_1 = 1}^n\sum_{l_2 = 1}^n...\sum_{l_k = 1}^n(gcd(l_1,l_2,...,l_k))^2fn​(k)=l1​=1∑n​l2​=1∑n​...lk​=1∑n​(gcd(l1​,l2​,...,lk​))2=∑d=1n∑l1...

2019-09-03 14:49:59 220

原创 洛谷 P3172 :[CQOI2015]选数(莫比乌斯反演 + 杜教筛)

∑i1=1h∑i2=1h∑i3=1h...[gcd(i1,i2,i3,..)=k]\sum_{i_1 = 1}^h\sum_{i_2 = 1}^h\sum_{i_3 = 1}^h...[gcd(i_1,i_2,i_3,..) = k]i1​=1∑h​i2​=1∑h​i3​=1∑h​...[gcd(i1​,i2​,i3​,..)=k]=∑i1=1⌊hk⌋∑i2=1⌊hk⌋∑i3=1⌊hk⌋......

2019-09-03 12:12:51 161

空空如也

空空如也

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

TA关注的人

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