自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 4992 求一个数的所有原根

题目链接题意:给一个正整数n(n>=2)n(n>=2),求她的所有原根,若不存在输出−1-1思路: 由定义1:一个数mm存在原根的充要条件为:m=2,4,pa,2∗pam=2,4,p^a,2*p^a(pp为奇素数) 可以特判输出−1-1的情况。又由定义2:若GG为nn的原根,则当gcd(i,φ(n))==1gcd(i,\varphi(n)) == 1,GiG^i也为nn的原根 可以通过先求出n

2017-09-06 23:46:07 2515

原创 51Nod 1135 求一个奇质数的最小原根

题目链接因为最小原根都不大,可以考虑暴力枚举去验证。对于一个奇质数PP,可以先对(P−1)(P-1)质因数分解为(P−1)=pa11pa22pa33....patt(P-1) = p_1^{a_1}p_2^{a_2}p_3^{a_3}....p_t^{a_t}对于枚举的数GG,若恒有G(P−1)/pi≠1(mod P)G^{(P-1)/p_i} \neq 1(mod\ P) 则GG为PP的原根。代

2017-09-06 20:57:30 595

原创 HDU 6191 DFS序+可持久化字典树

题目链接思路: 推荐两个前置的入门题:题目1 题目2理解上面两题之后此题就变得很套路了。先用DFSDFS序转树形结构为线性结构,然后按DFSDFS序的顺序向字典树中插值,维护一个前缀字典树,然后利用可持久化保留每一个插值前的字典树历史版本。因为一个以uu节点为根的子树的所有节点在DFSDFS序中连续,且为in[u]−out[u]in[u]-out[u]。故利用差分的思想,可实现高效查询。 注意

2017-09-05 20:40:18 671

原创 HDU 4757 树链剖分+可持久化字典树

题目链接思路: 对于这种询问树的路径的题,第一反应就是树链剖分,但与多个给定值异或后的最大值却没有办法去高效维护。考虑另外的思路。有关异或的数据结构,自然会想到01字典树,联系一个经典问题: 求一个数与一个数集中的某个数异或的最大值 而对于此题,每一个询问相当于给定了一个数集,只不过其中的数是一条路径上所有顶点的值。故可以从根出发,对于每一个节点,都维护一个从根到它自己所经过的所有顶点值的前缀

2017-09-05 17:05:11 734

原创 HDU 6059 01字典树

题目链接思路: 好题!对于这类题,一个通用的切入口是枚举一个量,然后丢到01字典树里去匹配。此题做法不止一种,可以枚举a[j]a[j],然后1−(j−1)1-(j-1)建立一棵前缀字典树,(j+1)−n(j+1)-n 建立一棵后缀字典树,然后分情况匹配即可。但个人认为最简单和最容易理解的还是枚举a[k]a[k],因为i<j<ki<j<k,故可以将1−(k−1)1-(k-1) 的数丢进字典树,然后用

2017-09-05 11:30:21 413

原创 HDU 5536 01字典树

题目链接题意:从nn个数s1,s2...sns_1,s_2...s_n中选出33个下标不同的数,求:max(i,j,k)((si+sj)⨁sk)max_{(i,j,k)}((s_i+s_j)\bigoplus s_k)思路: 考虑将所有数插入字典树,然后枚举i,ji,j,从字典树从删去si,sjs_i,s_j后拿(si+sj)(s_i+s_j)去匹配最大值即可。代码:#include<cstdio

2017-09-04 14:59:50 339

原创 Codeforces Round #367 (Div. 2) D题 01字典树

题目链接思路: 维护一个数组cntcnt,代表经过TrieTrie每一个节点的数的数量,插入加11,删除减11。询问时判断节点的cntcnt是否为0来决定该节点是否可走,然后尽量走与查询的数每一个二进制位相反的数。代码:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long l

2017-09-04 11:22:02 315

原创 HDU 4825 01字典树

题目链接题意:给定一个集合和多个询问,每个询问为一个数,输出集合中的一个数使得该数与询问的异或和最大。思路: 经典题。对于集合中的每一个数从高位到低位插入一棵01字典树,然后对于每一个询问的数xx,将x二进制分解后从高位进行匹配,尽量匹配相反的数(0匹配1,1匹配0),使异或后高位尽量出现1。代码:#include<cstdio>#include<cstring>#include<algori

2017-09-04 10:35:40 556

原创 BZOJ 3932 CQOI2015 主席树

题目链接思路: 观察询问的格式:在第xix_i的时间点的前kk个任务的优先度总和。易想到我们可以对于每一个时间点都维护一个权值线段树,其权值为当前存在任务的优先度。可以利用差分的思想,对于任务[S,E,P][S,E,P],可以将SS点+P+P,而E+1E+1点−P-P,则可以维护出每一个时间点的权值线段树。但这样的话内存是爆炸的。故可以考虑只保存有修改的时间点的权值线段树。 比如两个有两个任务,

2017-09-03 18:04:53 323

原创 HDU 2665 / POJ 2104 静态区间第k小 主席树

HDU题目链接 POJ题目链接很早就开始接触主席树,但一直没有真正理解其维护方式。后来了解了权值线段树和zkw线段树后,再回头学习主席树,发现其实理解起来也是很简单的。对于主席树的每一个节点,分别维护其左儿子节点的标号和右儿子节点的标号加上其维护区间的数的个数。对于区间[1,n][1,n]中的每一个[1,i](1<=i<=n)[1,i] (1<=i<=n),维护权值线段树的前缀和。然后利用差分思想

2017-09-03 10:46:41 371

原创 BZOJ 3685 zkw线段树 || 权值线段树

题目链接思路: 七个操作显然都可以用TreapTreap来维护,但编程复杂度很高,而且似乎此题数据也故意卡TreapTreap。前几个操作都很简单,主要复杂于前驱和后继的高效维护。考虑建立一棵权值线段树,对于值valval的前驱和线段树当前节点rtrt 若valval在rtrt的左儿子区间,则直接递归到左儿子去找前驱。 若valval在rtrt的右儿子区间,则前驱有两种可能,一是在右儿子区间中

2017-09-02 22:44:58 479

原创 51Nod 1675 莫比乌斯反演

题目链接思路: 对于abxa_{b_x},可以看成一个新的序列cc,即: ab1,ab2,ab3...&amp;lt;==&amp;gt;c1,c2,c3....a_{b_1},a_{b_2},a_{b_3} ... &amp;lt;==&amp;gt; c_1,c_2,c_3.... 对于bayb_{a_y},同理可看成一个新的序列dd。故问题等价于,求有多少对合法的下标x,yx,y,满足: gcd(x,y)=1gcd(x,y) = 1 且 c

2017-08-28 10:28:21 496 3

原创 51Nod 1535 思维+DFS

51Nod 1535思路: 根据图的性质,一定是在一棵树的基础上有一个环,故边的条数一定等于点的数目。然后再DFS判断一下是否连通即可。代码:#include<cmath>#include<string>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;co

2017-08-27 20:27:54 343

原创 51Nod 1335 思维

题目链接思路: 根据题意,要求最终字符串的字典序最小,则要求原字符串的小字符尽量换到前面,大的字符换到后面。考虑将字符串从小到大排序,则与原字符一一比较后的第一个不同的字符一定是交换的起点,假设其在原串的位置为pospos。然后考虑枚举交换的终点,因为原字符串的终点字符一定是排序后新串的第pospos个位置的字符。若存在多个,则模拟翻转,与答案比较并更新。总复杂度:O(Tn2)O(Tn^2)代码:

2017-08-27 19:34:59 345

原创 51Nod 1524 | Codeforces VK Cup 2015 - Finals F题 DP+数论

题目链接: 51Nod Codeforces思路: 一个直接的思路是可以考虑枚举每个数,再枚举每一个数的倍数,正向搜索,易发现其为O(nloglogn)O(nloglogn)的复杂度而我的思路是逆序DPDP。设dp[i]dp[i]是当ii这个数为合法解中的最小值时,包含的数的个数。 比如对于三个数:6,12,246,12,24 则: dp[6]=3dp[6] = 3 dp[12]=2d

2017-08-27 09:48:38 337

原创 HDU 6166 二进制分解 + 最短路

题目链接题意: 有nn个点mm条边的有向图,选出其中kk个点成为一个集合,集合中任意选一对跑最短路(不能是自己到自己),问其中距离的最小值是多少。思路: 首先一个明显的思路就是想办法转化成多起点多终点的最短路,然后建立一个超级起点和超级终点,跑一次得到答案。但此题起点集和终点集都来自一个集合,所以只能想办法将集合进行分组。考虑二进制分解,对于每两个不等的数,至少有一个二进制位不一样,这样我们可以

2017-08-23 09:56:38 640

原创 HDU 6169 Senior PanⅡ 数论+DP

题目链接题意:给定区间[L,R][L,R]和一个整数KK,问区间内所有满足其最小因子(11除外)为KK的数的和。 限制:L,R,K(&lt;=1e11)L,R,K(&lt;=1e11)思路: 首先考虑当KK不是素数时,其一定可以分解为更小的数的乘积,这样任何以KK为因子的数的最小因子一定不是KK,故直接特判0。然后考虑K的大小的限制。 对于任意一个[L,R][L,R]的区间,令PP为大于等于KK的第一个素

2017-08-22 19:56:53 1383 6

原创 HDU 6155 DP+矩阵+线段树

题目链接思路: 设dp[i][0/1]dp[i][0/1]是前ii个字符能组成的以0/10/1结尾的子串个数。若第ii个字符为00,则: dp[i][0]=dp[i−1][0]+dp[i−1][1]+1dp[i][0] = dp[i-1][0] + dp[i-1][1] + 1 dp[i][1]=dp[i−1][1]dp[i][1] = dp[i-1][1]怎么来理解这个递推式呢?考虑把第ii

2017-08-21 17:15:22 521

原创 HDU 6138 AC自动机

题目链接比赛时队友轻松切掉的水题= =,但我是最近抽时间学了一下AC自动机才理解了此题的正确思路。个人感觉AC自动机就是一棵升级的TrieTrie树,构造的思想又和KMPKMP雷同,入门还是非常容易的~思路: 将所有串都丢进AC自动机,每个节点记录一下深度。 每个询问对自动机询问两次,第一次询问进行染色,第二次询问针对染色过的节点更新答案。代码:#include<queue>#include<

2017-08-20 19:30:29 581

原创 HDU 6158 笛卡尔定理 + 韦达定理

题目链接感谢ICPCCamp的题解,链接送上:CCPC 2017网络赛题解题解已经讲得非常清楚了,补充一点细节吧。(1).关于笛卡尔定理对于此题,只需要了解这么一个性质:(来自wiki 用的谷歌翻译,若有偏差还请指出~)定义一个圆的曲率k=±1rk =\pm \frac{1}{r},其中rr是其半径。 若平面有两两相切,且有66个独立切点的四个圆,设其曲率为k1,k2,k3,k4k_1,k_2,k

2017-08-20 16:18:35 5313

原创 HDU 4773 圆的反演(经典

题目链接 参考博客题意:给定两个相离的圆和圆外定点PP,求过点PP且与已知的两个圆外切的所有圆。思路: 圆的反演变换入门题。 掌握两个关于圆反演的性质即可解决该问题。一是相切两圆的反相仍相切,若反相均为直线,则平行。 二是经过反演中心的圆,其反相为直线。故我们可以以P为反演中心,任意值为反演半径。先求出两个已知圆的反演圆,则与两个反演圆外切的直线,其反演后一定满足: (1).与两个圆的原形

2017-08-20 13:33:55 1081

原创 HDU 6136 模拟 + 优先队列

题目链接题意:一个圆形跑道,nn个人跑步,每个人有不同的起始点和速度(大小和方向均可能不同),标号1-n,当两个人相遇,标号小的将会被淘汰,问最后还剩一个人时的时间。思路: 直接模拟,首先将n个人按起点的大小排序,考虑第i个被淘汰的人,一定是与其相邻的两个人中的一个相遇,故每次可以找到最快相遇的一对选手,将其中标号小的人淘汰,模拟整个过程即可。其中时间的最小值可用优先队列维护,细节见代码注释。代码

2017-08-17 21:23:46 836

原创 HDU 6134 莫比乌斯反演

题目链接题意: 已知n<=1e6n<=1e6,求: f(n)=∑i=1n∑j=1i⌈ij⌉[gcd(i,j)==1]f(n) = \sum_{i=1}^n\sum_{j=1}^i \lceil\frac{i}{j}\rceil[gcd(i,j) == 1]思路: 首先套上莫比乌斯反演的经典转化: ∑d|nμ(d)=[n==1]\sum_{d|n}\mu(d) = [n == 1]得: f(

2017-08-17 18:59:48 1973 3

原创 HDU 6121 思维 + DFS

题目链接题意: 有一棵n个点的k叉树,标号为0到n-1。求所有子树大小的异或和。思路: 首先从顶向下进行预处理,得出每一种高度的完全k叉树的各个参量,对于此题我是用三个数组保存: cnt[i]:cnt[i]: 完全kk叉树第ii层的节点个数 sum[i]: sum[i]: 有ii层的完全kk叉树的所有节点个数 Xor[i]:Xor[i]: 有ii层的完全kk叉树所有子树的异或和然后我们

2017-08-16 15:32:26 601

原创 HDU 3430 置换群 + 同余方程组

题目链接思路: 设第一个序列为变换序列,第二个序列为目标序列。首先可以快速排除不合法的情况。 (1).对于变换序列中能够相互到达的集合,如n = 4时,如果{1,3}能够相互置换,{2,4}能够相互置换,目标序列应该与变换序列保持一致,即也应该是{1,3}相互置换,{2,4}相互置换。若不一致,则不合法。(2).在每一个能够相互置换的元素的集合里,其相对顺序在变换序列和目标序列中也应该保持一致。

2017-08-07 20:38:25 508

原创 HDU 6084 | 2017百度之星资格赛 1005 卡特兰数 + 分块打表

题目链接思路: 卡特兰数的变形,此题的公式还是比较好推的。熟悉卡特兰数的同学应该一眼就能看出来,对于长度为lenlen的0101偏串: 设n=len2n = \frac{len}{2} 则其构成的方案数为卡特兰数的第nn项 即hnh_n对于此题,一个重要的突破口便在于想清楚这么一个事实: 一个长度为nn的01偏串,从其中任意去掉一个小的01偏串,剩下的串拼在一起仍然是一个合法的01偏串由01

2017-08-07 10:55:41 1216

原创 积性函数的性质及证明 + 线性筛

引言在数论问题中,积性函数有着广泛的应用。 如在莫比乌斯反演问题中,函数变换之后如何快速维护前缀和往往是最重要也是最难的一步。如果维护的函数具有积性,那就可以尝试利用线性筛在O(n)O(n)的时限内完成预处理,从而达到优化复杂度的神奇作用。 本文的大部分相关性质及公式来自: 《线性筛与积性函数》−贾志鹏《线性筛与积性函数》- 贾志鹏 博主将试着证明其中的性质公式,严谨性可能欠缺,其目的主要是

2017-08-06 15:02:36 4527 2

原创 HDU 6070 二分+线段树

题目链接首先二分答案,记答案为AnsAns。 设区间[L,R][L,R]不同的值的个数为Size(L,R)Size(L,R) 则: Ans<=Size(L,R)R−L+1Ans <= \frac{Size(L,R)}{R-L+1}移项变形得: Size(L,R)+L∗Ans<=Ans(R+1)Size(L,R) + L*Ans <= Ans(R+1)故可以枚举每个区间的右端点RR 线段树每

2017-08-04 15:16:31 412

原创 HDU 6061 快速数论变换

题目链接思路: 设sum=−∑aisum = -\sum a_i故对于最终函数的第kk项,有: Ansk=∑i=knciCki(−sum)i−kAns_k = \sum_{i=k}^nc_iC_{i}^{k}(-sum)^{i-k}将组合数展开: Ansk=∑i=knci(−sum)i−ki!k!(i−k)!Ans_k = \sum_{i=k}^nc_i(-sum)^{i-k}\frac{i!

2017-08-03 23:51:54 857

原创 HDU 6069 数论 区间素数筛 + 赛后反思

题目链接设 x=pa11pa22....pannx = p_1^{a_1}p_2^{a_2}....p_n^{a_n} 则d(x)=(1+a1)(1+a2)...(1+an)d(x) = (1+a_1)(1+a_2)...(1+a_n) d(xk)=(1+ka1)(1+ka2)(1+ka3)...(1+kan)d(x^k) = (1+ka_1)(1+ka_2)(1+ka_3)...(1+ka_n

2017-08-03 23:28:58 1173

原创 HDU 4609 快速傅里叶变换

题目链接题意:已知n条边的长度,任取三条不同的边能够组成三角形的概率。很经典的FFT 如果已知任意两条边的和的情况,那么枚举第三条边可以在O(n)O(n)的复杂度下得出总方案数。难点便在于如果枚举两条边求和,其复杂度是不可承受的O(n2)O(n^2)考虑用FFT优化该过程。 构造多项式,xnx^n的系数是长度为n的边的条数。 类似于生成函数求方案数的思想。 该多项式与自身相乘便能得出任意两条

2017-08-03 10:23:08 977

原创 HDU 1402 快速傅里叶变换

题目链接每一个整数都可以看成x=10x = 10的多项式。这样就可以利用FFTFFT快速求解了。 DFT:O(nlogn)DFT:O(nlogn ) 乘法:O(n):O(n) DFT−1:O(nlogn)DFT^{-1}:O(nlog n) 总复杂度:O(nlogn)O(nlog n)代码:#include&amp;lt;cstdio&amp;gt;#include&amp;lt;cstdlib&amp;gt;#include&amp;lt;algorit

2017-08-02 20:37:00 588

原创 BZOJ 3994 莫比乌斯反演

题目链接题意:已知d(x)为x的约数个数,给定N,M(<=50000),求: ∑i=1n∑j=1md(ij)\sum_{i=1}^n \sum_{j=1}^md(ij)思路: 直接利用公式: d(nm)=∑i|n∑j|m[gcd(i,j)==1]d(nm) = \sum_{i|n}\sum_{j|m}[gcd(i,j) == 1] 前缀和: ∑i=1n∑j=1md(ij)=∑i=1n∑j

2017-07-31 23:10:17 363

原创 BZOJ 3930 容斥

题目链接此题的容斥解法首先要基于一个看似神奇但实则显然的定理: 在一个区间长度为lenlen的区间任意取n个数,其中n个数不完全相同,则这n个数的gcd一定满足:gcd<=lengcd <= len故我们可以进行递推容斥。 首先假设取的n个数完全相同,若存在其gcdgcd等于kk的情况,则k一定满足: l<=k<=rl <= k <= r且n个数只能全是k,故如果满足条件,该方案数一定是1。故

2017-07-31 19:56:29 375

原创 BZOJ 3309 莫比乌斯反演

题目链接题意:多组数据,已知a,b(<=1e7)a,b(<= 1e7),定义f(n)f(n)为nn所含质因子的最大幂指数。 求∑i=1a∑j=1bf(gcd(i,j))\sum_{i=1}^{a}\sum_{j=1}^bf(gcd(i,j))此前写过一个f(n)f(n)为nn的约数和的题解:我是链接= =感觉此类题的推导都是一个套路,定义最终答案为AnsAns,首先转换枚举变量为gcdgcd,并设

2017-07-31 18:49:07 379

原创 BZOJ 2154 + 2693 莫比乌斯反演 (好题

BZOJ 2154题目链接 BZOJ 2693题目链接(权限题)再送上一道类似推导思路的题: NJU 1017题目链接参考文档 (用了一整天 终于刷完文档例题了 qwq)题意: 给定n,m(&amp;amp;amp;lt;=1e7)n,m(&amp;amp;amp;lt;=1e7)n,m(∑i=1n∑j=1mlcm(i,j)∑i=1n∑j=1mlcm(i,j)\sum_{i =1}^n \sum_{j=1}^m lcm(...

2017-07-31 00:45:14 899 3

原创 BZOJ 3529 莫比乌斯反演 + 离线 + 树状数组动态维护前缀和

题目链接 参考资料 膜PoPoQQQ神犇题意:令F(i)F(i)为i的约数和。给定q个询问,每个询问包含n,m,a。 求Ans=∑x=1n∑y=1mF(gcd(x,y)) (F(gcd(x,y))&lt;=a)Ans = \sum_{x=1}^n \sum_{y=1}^m F(gcd(x,y)) \space (F(gcd(x,y))&lt;=a)课件里面讲得很详细,但其中的细节讲解可能对初学者不太友好。

2017-07-30 16:46:25 572

原创 BZOJ 2820 莫比乌斯反演

题目链接(权限题)题意:给定n,mn,m,问满足1<=x<=n and 1<=y<=m1<=x<=n \space and \space 1<=y<=m且gcd(x,y)gcd(x,y)为素数的方案数有多少思路:关注此题很久了,今天借了高爷的账号终于补掉了此题(再次表示感谢qwq)我们试着来推导一下公式。 设: f(i):gcd(x,y)=if(i):gcd(x,y) = i 的方案数。 F(

2017-07-30 13:56:12 353

原创 HDOJ 1705/POJ 2954 叉积+Pick定理

题目链接 题意: 已知一个格点三角形的三个点,问其内部的格点数目。因坐标范围较大,此题初看很难下手。 但其实就考了一个对Pick定理的应用。Pick定理: 对于顶点坐标均为整数的简单多边形,皮克定理说明了其面积S和内部格点数目n,边上格点数目s的关系: S=n+s2−1S = n + \frac{s}{2} - 1对于此题,n就是我们需要求解的量,移项得: n=S+1−s2n = S +

2017-07-28 14:27:45 334

原创 同余小结

引言形如ax≡b(mod m)ax \equiv b(mod\ m)同余方程的求解,以及同余定理的应用常常隐藏在算法竞赛的很多题目里。为什么取余满足加法,减法和乘法而不满足除法? 为什么求解逆元的多种方法有不同的条件,而且如何认识方法的正确性? 如何理解九余数定理? …..通过对同余的了解和对同余定理的学习,我们能够对很多常见的结论有更深的认识。 同时有助于对其他相关算法的学习。因本蒟蒻水平

2017-07-27 00:06:27 1071

空空如也

空空如也

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

TA关注的人

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