- 博客(354)
- 收藏
- 关注
原创 variant (C++ 模板元编程)
std::variant可以理解为一个会自动清除空间的union,保证了赋值时内存的正确性,能够自动进行析构。通过get可传入下标或者type来获取值,但是不安全,如果传入类型于当前类型不一致时会引发错误。可以通过get_if传入下标或者值和variant指针来安全获得值。有类模板variant_alternative来获取第几个属性的type,以及类模板variant_size来获取variant中存放了多少个属性。variantget< type >get< N >
2023-11-04 22:13:15
612
原创 tuple 简易实现(C++ 模板元编程)
里的内容,并没有采用继承的方式实现,但是,在后续的类模板中,均套用一下。在标准库里面,tuple主要有下面四个类模板 or 函数模板。由于继承,所以可以通过。
2023-11-03 22:57:16
721
原创 MIT 6.824 Lab 1 MapReduce
MapReduce目标根据论文所说明的,有MASTER和WORKER两类工作节点,以下实现大都按照论文所说的实现,但是在对MASTER的实现上有所改动:MASTER向WORKER发送心跳检测,这里改为了对分配出去的任务进行超时监控。MASTER: 接收MapReduce任务(需要处理的文件),并生成对应的Map任务。 接受WORKER的任务分配请求,按需给WORKER分配任务(Map or Reduce)。 对分配给WORKER的任务(Map or Reduce)进行超时监控。 当M
2022-05-22 00:39:22
639
原创 G. GCD Festival(莫比乌斯、欧拉函数)
G. GCD Festival∑i=1n∑j=1ngcd(ai,aj)gcd(i,j)∑d=1nd∑i=1nd∑j=1ndgcd(aid,ajd)[gcd(i,j)=1]∑d=1nd∑k=1ndμ(k)∑i=1nkd∑j=1nkdgcd(aikd,ajkd)T=kd∑T=1n∑i=1nT∑j=1nTgcd(aiT,ajT)∑d∣Tdμ(Td)∑T=1nϕ(T)∑i=1nT∑j=1nTgcd(aiT,ajT)\sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \gcd(a
2021-10-07 20:19:43
583
原创 K. Easy Sigma(类欧几里得)
K. Easy Sigma∑i=1n(−1)⌊i×k⌋,(n≤109,k≤104)\sum_{i = 1} ^{n} (-1) ^{\lfloor i \times \sqrt k \rfloor}, (n \le 10 ^ 9, k \le 10 ^ 4)\\i=1∑n(−1)⌊i×k⌋,(n≤109,k≤104)考虑(−1)x=1−2×(xmod 2)=1−2(x−2×x2)=1−2x+4×⌊x2⌋(-1) ^{x} = 1 - 2 \times (x \mod 2) = 1 - 2(x
2021-10-07 20:18:40
339
原创 类欧几里得(模板题推导)
类欧几里得设三个函数f(a,b,c,n)=∑i=0na×i+bc,g(a,b,c,n)=∑i=0ni×a×i+bc,h(a,b,c,n)=∑i=0n(a×i+bc)2f(a, b, c, n) = \sum\limits_{i = 0} ^{n} \frac{a \times i + b}{c}, g(a, b, c, n) = \sum\limits_{i = 0} ^{n} i \times \frac{a \times i + b}{c}, h(a, b, c, n) = \sum\limits_{
2021-10-02 19:59:46
323
原创 #138. 类欧几里得算法
#138. 类欧几里得算法以下除法均为向下取整, 定义f(a,b,c,n,k1,k2)=∑x=0nxk1(a×x+bc)k2f(a, b, c, n, k_1, k_2) = \sum\limits_{x = 0} ^{n} x ^{k_1} \left(\frac{a \times x + b}{c}\right) ^ {k_2}f(a,b,c,n,k1,k2)=x=0∑nxk1(ca×x+b)k2。∑x=0nxk1(a×x+bc)k2,(1≤n,a,c≤109,0≤b≤109,0≤k1+
2021-10-02 18:00:41
303
原创 I. Rise of Shadows(类欧几里得)
I. Rise of Shadows一天有HHH个小时,MMM分钟,问,有多少个整数分钟,满足时针与分针的角度≤α\le \alpha≤α,α=2πAHM\alpha = \frac{2 \pi A}{HM}α=HM2πA。∑i=0H−1∑j=0M−1[∣2π(i×M+j)HM−2πjM ∣≤2πAHM]∑i=0H−1∑j=0M−1[∣i×M+j−H×j∣≤A]H×M−∑i=0H−1∑j=0M−1[i×M+j−H×j>A]−∑i=0H−1∑j=0M−1[i×M+j−H×j<−A]
2021-10-02 16:38:20
900
1
原创 C - Maximize GCD(简单数论)
C - Maximize GCD给定长度为n,(2≤3×105)n, (2 \le 3 \times 10 ^ 5)n,(2≤3×105)的数组a,(1≤ai≤3×105)a, (1 \le a_i \le 3 \times 10 ^ 5)a,(1≤ai≤3×105),一个数字K,(1≤K≤1018)K, (1 \le K \le 10 ^{18})K,(1≤K≤1018),我们可以对数组aaa进行最多kkk次操作,每次操作选定一个i,(1≤i≤n)i, (1 \le i \le n)i,(1≤i≤n
2021-09-23 19:59:59
351
原创 Problem M. Mediocre String Problem(Z 函数 + PAM)
Problem M. Mediocre String Problem给定两个串s,ts, ts,t,要求有多少不同的三元组(i,j,k)(i, j, k)(i,j,k),满足:1≤i≤j≤∣s∣1 \le i \le j \le \mid s \mid1≤i≤j≤∣s∣。1≤k≤∣t∣1 \le k \le \mid t \mid1≤k≤∣t∣。j−i+1≥kj - i + 1 \ge kj−i+1≥k。且s[i,j]+t[1,k]s[i, j] + t[1, k]s[i,j]+t[1,k]是一
2021-09-01 15:37:19
300
原创 Codeforces Round #739 (Div. 3)(AK实况)
Codeforces Round #739 (Div. 3)A. Dislike of Threes找到第kkk个既不是333的倍数,个位数上也不是333的数,也已预处理然后O(1)O(1)O(1)输出,也可直接forforfor循环暴力。#include <bits/stdc++.h>using namespace std;int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w",
2021-08-22 22:33:27
330
原创 2021CCPC华为云挑战赛:HDU 7091 重叠的子串(SAM + 线段树合并)
重叠的子串给定一个长度为n(1≤∣s∣≤105)n(1 \le \mid s \mid \le 10 ^ 5)n(1≤∣s∣≤105)的只由小写字母构成的字符串sss,有m,(1≤m≤106)m, (1 \le m \le 10 ^ 6)m,(1≤m≤106)个询问:每次询问给定l,rl, rl,r,问sss是否存在一个字串ttt,满足∣t∣<2(r−l+1)\mid t \mid < 2(r - l + 1)∣t∣<2(r−l+1),且s[l,r]s[l, r]s[l,r]在ttt中
2021-08-21 18:52:27
437
原创 FFT字符串匹配(解决通配符问题)
FFT字符串匹配定义字符串下标从000,开始,有文本串AAA长度为nnn,模式串BBB长度为mmm,我们可以考虑一个函数f(x,y)=A(x)−B(y)f(x, y) = A(x) - B(y)f(x,y)=A(x)−B(y)。我们设F(x)(x≥m−1)=∑i=0m−1f(x−m+1+i,i)F(x)(x \ge m - 1) = \sum\limits_{i = 0} ^{m - 1} f(x - m + 1 + i, i)F(x)(x≥m−1)=i=0∑m−1f(x−m+1+i,i),由定义显然
2021-08-16 20:30:25
839
原创 E. Mocha and Stars(莫比乌斯反演、简单dp)
E. Mocha and Stars∑a1=l1r1∑a2=l2r2⋯∑an=lnrn[a1+a2+⋯+an≤m][gcd(a1,a2,…,an)=1]\sum_{a_1 = l_1} ^{r_1} \sum_{a_2 = l_2} ^{r_2} \dots \sum_{a_n = l_n} ^{r_n} [a_1 + a_2 + \dots + a_n \le m][\gcd(a_1, a_2, \dots, a_n) = 1]\\a1=l1∑r1a2=l2∑r2⋯an=ln∑
2021-08-16 20:28:37
610
原创 Convolution(2021牛客暑期多校训练营4)
Convolution定义a⊕b=a×bgcd(a,b)2a \oplus b = \frac{a \times b}{\gcd(a, b) ^ 2}a⊕b=gcd(a,b)2a×b,bm=∑i=1n∑j=1nai×jc[i⊕j=m]b_m = \sum\limits_{i = 1} ^{n} \sum\limits_{j = 1} ^{n}a_i \times j ^ c [i \oplus j = m]bm=i=1∑nj=1∑nai×jc[i⊕j=m],我们要求b1⊕b2⊕⋯⊕bnb_1
2021-08-08 13:50:32
323
原创 P3700 [CQOI2017]小Q的表格(反演、分块)
P3700 [CQOI2017]小Q的表格给定一个大小为n×nn \times nn×n的表格,初始时i,ji, ji,j位置上填的是f(i,j)=i×jf(i, j) = i \times jf(i,j)=i×j,有mmm个操作,每次操作给定a,b,x,ka, b, x, ka,b,x,k,把格子a,ba, ba,b上的值改成xxx,求∑i=1k∑j=1kf(i,j)\sum\limits_{i = 1} ^{k} \sum\limits_{j = 1} ^{k} f(i, j)i=1∑kj=1∑k
2021-08-07 19:24:00
245
原创 P3242 [HNOI2015] 接水果(整体二分、扫描线)
P3242 [HNOI2015] 接水果给定一棵树,定义给定了ppp个盘子,每个盘子是树上u,vu, vu,v两点的路径,且盘子有权值,定义水果,水果也是树上u,vu, vu,v两点间的路径。有qqq个询问,每次给定u,v,ku, v, ku,v,k,表示可以接住水果u,vu, vu,v的盘子中权值第kkk小的权值是什么,输出权值,一个盘子可以接住一个水果,当且仅当盘子是水果的子路径。考虑如何求是否覆盖,对每个点dfsdfsdfs序得到[sti,edi][st_i, ed_i][sti,edi],
2021-08-06 20:02:11
249
原创 3085 吃遍赴丝码(分治)
3085 吃遍赴丝码给定一个长度为nnn的数组,求∑i=1n∑j=in(j−i+1)×min{ai,…,aj}×max{ai,…,aj}\sum\limits_{i = 1} ^{n} \sum\limits_{j = i} ^{n} (j - i + 1) \times min\{a_i, \dots, a_j\} \times max\{a_i, \dots, a_j\}i=1∑nj=i∑n(j−i+1)×min{ai,…,aj}×max{ai,…,aj}。考虑分治求解,f(l,mid)
2021-07-30 20:10:48
270
原创 HDU6956-Pass!(2021杭电多校一)(BSGS)
Pass!f(1)=0,f(2)=n−1,f(t)=(n−2)×f(t−1)+(t−1)×f(t−2)f(1) = 0, f(2) = n - 1, f(t) = (n - 2) \times f(t - 1) + (t - 1) \times f(t - 2)f(1)=0,f(2)=n−1,f(t)=(n−2)×f(t−1)+(t−1)×f(t−2),考虑对通项两边同时加一个x×f(t−1)x \times f(t - 1)x×f(t−1)。可以得到f(t)+x×f(t−1)=(n−1+x)×(f(t
2021-07-21 23:37:58
643
原创 J. Product of GCDs(莫比乌斯反演)(2021牛客暑期多校训练营2)
Product of GCDs∏d=1nd∑[gcd(s1d,s2d,…,skd)=1]∏d=1nd∑i=1ndμ(i)Cf[id]k\prod_{d = 1} ^{n} d ^{\sum[\gcd(\frac{s_1}{d}, \frac{s_2}{d}, \dots, \frac{s_k}{d}) = 1]}\\\prod_{d = 1} ^{n} d ^{\sum\limits_{i = 1} ^{\frac{n}{d}} \mu(i) C_{f[id]} ^{k}}\\d=1∏nd∑[g
2021-07-21 20:19:46
331
原创 不要666升级版(数位DP,三次方和)
不要666升级版∑(pre+suc)2n×pre2+2×pre∑suc+∑suc2\sum(pre + suc) ^ 2\\n \times pre ^ 2 + 2 \times pre \sum suc + \sum suc ^ 2\\∑(pre+suc)2n×pre2+2×pre∑suc+∑suc2∑(pre+suc)3∑(pre3+3×pre2×suc+3×pre×suc2+suc3)n×pre3+3×pre2∑suc+3×pre∑suc2+∑suc3\sum (pre + suc) ^
2021-07-13 20:36:39
279
原创 P5175 数列(矩阵快速幂)
P5175 数列anb=(x×an−1+y×an−2)2x2×an−12+y2×an−22+2×x×y×an−1an−2x2×an−12+y2×an−22+2×x×y×an−2(x×an−2+y×an−3)x2×an−12+y2×an−22+2×x×y×(x×an−22+y×an−2×an−3)a_n ^ b = \left(x \times a_{n - 1} + y \times a_{n - 2}\right) ^ 2\\x ^ 2 \times a_{n - 1} ^ 2 + y ^ 2 \t
2021-07-13 20:04:05
283
原创 吉哥系列故事——恨7不成妻(数位 DP)
吉哥系列故事——恨7不成妻∑i=1n(pre+suc)2∑i=1npre2+suc2+2×pre×sucn×pre2+∑suc2+2×pre∑suc\sum_{i = 1} ^{n}(pre + suc) ^ 2\\\sum_{i = 1} ^{n} pre ^ 2 + suc ^ 2 + 2 \times pre \times suc\\n \times pre ^ 2 + \sum suc ^ 2 + 2 \times pre \sum suc\\i=1∑n(pre+suc)2i=1∑np
2021-07-13 19:59:41
296
原创 E. Surprise me!(莫比乌斯反演 + 虚树 DP)
E. Surprise me!∑i=1n∑j=1nϕ(ai×aj)d(i,j)设pai=i∑i=1n∑j=1nϕ(i×j)d(pi,pj)∑i=1n∑j=1nϕ(i)ϕ(j)ϕ(gcd(i,j))×gcd(i,j)×d(pi,pj)∑d=1ndϕ(d)∑i=1nd∑j=1ndϕ(id)ϕ(jd)×d(pid,pjd)[gcd(i,j)=1]∑d=1ndϕ(d)∑k=1ndμ(k)∑i=1nkd∑j=1nkdϕ(ikd)ϕ(jkd)×d(pikd,pjkd)T=kd∑T=1n(∑i=1nT∑j=1nT
2021-07-08 21:19:04
327
3
原创 F. Strange Array(Codeforces Round #727 (Div. 2))(主席树)
F. Strange Array给定一个长度为nnn的数组aaa,1≤ai≤n1 \leq a_i \leq n1≤ai≤n,对于每个aia_iai,我们要找到一个l≤i,r≥il \leq i, r \geq il≤i,r≥i,使得,我们对区间[l,r][l, r][l,r]升序后,值为aia_iai的数与中位数相隔最远,输出这个最远距离。我们分两种情况讨论:aia_iai在中位数的左边,也就是ai≤a_i \leqai≤中位数,我们考虑把aj≥aia_j \geq a_iaj≥a
2021-06-21 14:30:44
382
原创 C - Swaps 2(树状数组,思维)
C - Swaps 2给定两个长度为nnn的数组A,BA, BA,B,我们可以进行若干次如下操作,使AAA变成BBB,选定i<ni < ni<n,将aia_iai减小111,将ai+1a_{i + 1}ai+1增加111。交换ai,ai+1a_i, a_{i + 1}ai,ai+1。问我们进行多少次操作,可以将AAA变成BBB,如果无解则输出−1-1−1,否则输出最小操作次数。容易发现,不管怎么交换ai+ia_i + iai+i的值都是不变的,当我们要得到bib_i
2021-06-08 13:41:29
414
原创 L - Lookup Performance(主席树)
L - Lookup Performance问对于一颗二叉搜索树来说,如果我们要找一个值域区间的值有多少个,他会向下递归查找几次,设,第iii个节点所代表的最大最小值为li,ril_i, r_ili,ri,此时我们要查询L,RL, RL,R之间的值有多少个,如果L≤li≤ri≤RL \leq l_i \leq r_i \leq RL≤li≤ri≤R,那么我们不会递归下去查询,意味着当访问完这个点后不会对答案产生新的贡献。如果ri<L or li>Rr_i &
2021-05-27 14:41:16
335
原创 P3591 [POI2015]ODW(分块)
P3591 [POI2015]ODW给定一颗有nnn个节点的树,点有点权,给定一个长度为nnn的排列ppp,给定一个长度为n−1n - 1n−1的数组ccc,我们会在树上进行n−1n - 1n−1次行走,第iii次我们会从p[i]p[i]p[i]走到p[i+1]p[i + 1]p[i+1],步长为c[i]c[i]c[i],且走最短路,当我们到p[i+1]p[i + 1]p[i+1]的距离小于c[i]c[i]c[i]的时候,我们会直接到点p[i+1]p[i + 1]p[i+1],对每次行走,我们要求出其
2021-05-27 11:12:55
373
原创 L. Coordinate Paper(CCPC 长春)构造
L. Coordinate Paper构造一个长度为nnn的序列aaa,满足ai≥0a_i \geq 0ai≥0,∑i=1nai=s\sum\limits_{i = 1} ^{n} a_i = si=1∑nai=s,对于任意的i∈[1,n−1]i \in [1, n - 1]i∈[1,n−1],都有ai−ai+1=k or ai+1−ai=1a_i - a_{i + 1} = k\ or\ a_{i + 1} - a{i} = 1ai−ai+1=k or
2021-05-26 19:50:03
446
原创 B.The Tortoise and the Hare 长春
B. The Tortoise and the Hare给定一个长度为nnn的数组a,(1≤ai<m)a, (1 \leq a_i < m)a,(1≤ai<m),mmm是一个给定的数(1≤m≤109)(1 \leq m \leq 10 ^ 9)(1≤m≤109),有QQQ次操作,分为两类:给定u,v,(1≤u≤n,1≤v<m)u, v,(1 \leq u \leq n, 1 \leq v < m)u,v,(1≤u≤n,1≤v<m),把数组上aua_uau的值改为
2021-05-26 17:28:30
295
原创 CF1422F Boring Queries(ST表 + 主席树)
CF1422F Boring Queries给定一个长度为nnn的数组a,(1≤ai≤2×105)a,(1 \leq a_i \leq 2 \times 10 ^ 5)a,(1≤ai≤2×105),有mmm次询问,每次询问给定l,rl, rl,r,要我们求区间[l,r][l, r][l,r],aia_iai的lcmlcmlcm,强制在线。对于质因子ppp,如果p2>2×105p ^ 2 > 2 \times 10 ^ 5p2>2×105,那么它在每个数中出现的次数只有两种可能0/1
2021-05-25 16:03:07
320
原创 数列递推(牛客练习赛83)(数学、分块)
数列递推给定f(0)f(0)f(0),定义fn=∑i=1nf(nmod i)f_n = \sum\limits_{i = 1} ^{n} f_{(n \mod i)}fn=i=1∑nf(nmodi),求f1,f2,f3,…,fn−1,fnf_1, f_2, f_3, \dots, f_{n - 1}, f_{n}f1,f2,f3,…,fn−1,fn。∑i=1nf(nmod i)∑i=1nf(n−nii)\sum_{i = 1} ^{n} f_{(n \mod i)}\\\sum_
2021-05-24 15:10:51
303
原创 C. Safe Distance(二分 + 并查集)
C. Safe Distance(二分 + 并查集)给定一个X×YX \times YX×Y的矩形,里面有n,(1≤n≤1000)n,(1 \leq n \leq 1000)n,(1≤n≤1000)个点,我们要从点(0,0)(0, 0)(0,0)走到(X,Y)(X, Y)(X,Y),我们要使过程中与这nnn个点的最小距离最大,输出这个最大距离。考虑二分答案?对于给定的xxx,判断能否从(0,0)(0, 0)(0,0)走到(X,Y)(X, Y)(X,Y),设置l=0,r=min(disS,disT)l =
2021-05-20 18:24:52
509
原创 L. Continuous Intervals(单调栈 + 线段树 + 思维)
L. Continuous Intervals给定一个长度为nnn的数组,问里面有多少个区间[l,r][l, r][l,r],满足,对这个区间排序后,两两差值$ \leq 1$,输出区间个数。如果说区间[l,r][l, r][l,r]是符合要求的,则满足max(al,…,ar)−min(al,…,ar)+1=cntmax(a_l, \dots, a_r) - min(a_l, \dots, a_r) + 1 = cntmax(al,…,ar)−min(al,…,ar)+1=cnt,cntcntc
2021-05-19 20:43:54
365
原创 P1848 [USACO12OPEN]Bookshelf G(线段树优化 DP)
P1848 [USACO12OPEN]Bookshelf G有nnn间物品,每个物品有两个属性Wi,HiW_i, H_iWi,Hi,宽度跟高度,要求把这nnn件物品划分成若干连续的组,每组内∑Wi≤L\sum\limits W_i \leq L∑Wi≤L,并且要求最小化每组最大高度之和。设f[i]f[i]f[i]表示以iii为结尾的代价,则有:f[i]=min(f[j]+maxj≤k≤ih[k])[∑k=jiw[i]≤L]f[i] = min(f[j] + max_{j \leq k \leq
2021-05-19 16:46:12
312
原创 P2839 [国家集训队]middle(二分 套 主席树)
P2839 [国家集训队]middle有一个长度为nnn的序列,有mmm次询问,每次询问a,b,c,da, b, c, da,b,c,d,为l∈[a,b],r∈[c,d]l \in [a, b], r \in [c, d]l∈[a,b],r∈[c,d],[l,r][l, r][l,r]区间的中位数最大是多少,强制在线,1≤n≤20000,1≤m≤250001 \leq n \leq 20000, 1 \leq m \leq 250001≤n≤20000,1≤m≤25000。由于有a≤b≤c≤da \l
2021-05-12 19:25:08
231
原创 E. Sign on Fence(整体二分 + 线段树维护区间最大连续 1 的个数)
E. Sign on Fence给定一个长度为nnn的数组aaa,1≤ai≤1091 \leq a_i \leq 10 ^ 91≤ai≤109,有mmm次询问,每次给定l,r,kl, r, kl,r,k,要我们在[l,r][l, r][l,r]区间内找到一个长度为kkk的区间,使得区间最小值最大,输出最大值。考虑二分答案,如果当前二分的区间是[l,r][l, r][l,r],我们把大于midmidmid的点,在数组中都设置为111,小于等于midmidmid的点,在数组中都设置为000,考虑用线段树
2021-05-12 17:11:29
596
原创 P3564 [POI2014]BAR-Salad Bar(ST表 + 二分)
P3564 [POI2014]BAR-Salad Bar给定一个长度为nnn的数组,里面元素只有111跟−1-1−1,问选出一个长度为lenlenlen的区间使得,这个区间的前缀和时刻大于零,后缀和时刻大于零,输出最大长度lenlenlen,考虑枚举lll端点,我们可以二分出最大的rrr,满足pre_sumpre\_sumpre_sum时刻大于等于零,设为[l,r][l, r][l,r],考虑枚举RRR端点,我们可以二分出最小的LLL,满足suc_sumsuc\_sumsuc_sum时刻大于等于零,设
2021-05-11 23:20:58
332
原创 P1600 [NOIP2016 提高组] 天天爱跑步(线段树合并,lca)
P1600 [NOIP2016 提高组] 天天爱跑步给定一颗有nnn个点的树,有mmm个人在树上移动,第iii个人从sis_isi点,移动到tit_iti点,且他们按照最短路移动,每秒移动一条边的距离,点iii在wiw_iwi时刻有一个观察员,我们需要对每个点统计,在wiw_iwi时刻有多少个人恰好到达这个点。如果第vvv个人,在wuw_uwu时刻恰好出现在点uuu,则一定有dis(sv,u)=wudis(s_v, u) = w_udis(sv,u)=wu,且uuu在sv,tvs_v,
2021-05-10 21:31:32
370
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人