自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高二复习计划汇总

九月LCT(3天)(已完成) 字符串(SAM,ACAM,KMP,扩展KMP,PAM)(6天)(已完成) 图论(3天) 数据结构(3天) 网络流(3天) 多项式板子(1天)(重写多几遍,做到1小时调AC) 生成函数(7天) 数论(2天) 组合数学(2天)

2021-01-08 20:30:31 264 1

原创 AtCoder Grand Contest 012

A - AtCoder Group Contest排个序每一组的最小值肯定在前nnn个。后面次大和最大交替放即可。#include<bits/stdc++.h>using namespace std;const int N=300010;int n,a[N];int main(){ scanf("%d",&n); for(int i=1;i<=3*n;i++) scanf("%d",&a[i]); sort(a+1,a+1+3*n); long

2021-04-20 20:33:52 1

原创 AtCoder Grand Contest 011

A - Airport Bus从后往前贪心即可。#include<bits/stdc++.h>using namespace std;const int N=100010;int a[N],n,c,k;int main(){ scanf("%d %d %d",&n,&c,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); int tot=1,now=a[n],a

2021-04-20 19:51:52 1

原创 AtCoder Grand Contest 010

直接开始讲题吧。比赛链接在这:阿巴A - Addition只需要看看奇数的个数是否为奇数即可。#include<bits/stdc++.h>using namespace std;const int N=100010;int a[N],n,t[2];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]),t[a[i]&1]++; printf(t[1]&

2021-04-20 19:07:53 1

原创 AtCoder Grand Contest 009

正题A - Multiple Array

2021-03-26 16:50:35 1

原创 AtCoder Grand Contest 008

正题A - Simple Calculator从后往前一个一个满足就可以了,因为每次给一个前缀加代表这是个不降序列。#include<bits/stdc++.h>using namespace std;int A,B,ans=0;int main(){ scanf("%d %d",&A,&B); if(abs(A)<abs(B)){ if(A<0) ans++,A=-A; ans+=abs(B)-abs(A); A+=abs(B)-ab

2021-03-26 16:04:03 2

原创 AtCoder Grand Contest 007

正题A - Shik and Stone每一行的#都形成一个线段,并且与上下行的线段交恰好为1,特殊判断首行和尾行。#include<bits/stdc++.h>using namespace std;const int N=10;char s[N][N];int n,m;int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%s",s[i]+1); int l=0,r=0,s

2021-03-26 14:54:46

原创 AtCoder Grand Contest 006

正题A - Prefix and Suffix题目要求找到前缀和后缀的最大匹配,nnn这么小,暴力枚举即可。#include<bits/stdc++.h>using namespace std;const int N=110;int n;char a[N],b[N];int main(){ scanf("%d",&n); scanf("%s",a+1); scanf("%s",b+1); int mmax=0; for(int t=1;t<=n;t++

2021-03-26 12:58:33 1

原创 AtCoder Grand Contest 005

正题A - STring相当于找到最多对匹配的括号,记一下前面剩下多少个左括号,如果当前有右括号直接匹配就行。#include<bits/stdc++.h>using namespace std;const int N=200010;char s[N];int n,tot=0,ans=0;int main(){ scanf("%s",s+1);n=strlen(s+1); ans=n; for(int i=1;i<=n;i++) { if(s[i]=='S')

2021-03-19 13:06:46 1

原创 AtCoder Grand Contest 004

正题A - Divide a Cuboid如果有一个是偶数,那么答案就是 000,否则就找三个面中最小的。#include<bits/stdc++.h>using namespace std;int A,B,C;int main(){ scanf("%d %d %d",&A,&B,&C); if(A%2==0 || B%2==0 || C%2==0) printf("0\n"); else printf("%lld\n",min(1ll*A*B,mi

2021-03-18 20:57:09

原创 AtCoder Grand Contest 003

正题A - Wanna go back home如果一个方向存在,那么另一个方向必定存在,否则无解。#include<bits/stdc++.h>using namespace std;const int N=1010;char s[N];int n;int main(){ scanf("%s",s+1);n=strlen(s+1); int A=0,B=0; for(int i=1;i<=n;i++) if(s[i]=='N') A|=1; else i

2021-03-17 21:54:26 1

原创 AtCoder Grand Contest 002

正题A - Range Product考虑一下正负就可以了。#include<bits/stdc++.h>using namespace std;int a,b;int main(){ scanf("%d %d",&a,&b); if(a<=0 && b>=0) printf("Zero"); else if(a>0) printf("Positive"); else printf(((b-a+1)&1)?"Neg

2021-03-16 20:10:23 1

原创 AtCoder Grand Contest 001

D - Arrays and Palindrome挺有趣的。根据题意可以知道,一个长度为2k+12k+12k+1的回文,可以产生kkk条边,一个长度为2k2k2k的回文,也可以产生kkk条边。边连接两个位置意味着两点相同。假若总长为nnn。若nnn为奇数,则至少需要n−1n-1n−1条边,而两个序列至少都会有111个长度为奇数的回文,此时的总边数恰好为n−1n-1n−1,所以两个序列恰好都会有111个长度为奇数的回文。若nnn为偶数,则至少需要n−1n-1n−1条边,两个序列都可以没有奇数回文,也

2021-03-16 20:10:06 1

原创 [APIO2017]考拉的游戏,构造与思维题

正题这题还挺好玩的,花了6h左右吧。只有第三个subtask比其他人的更严格,其他的大致相同,最后一个subtask可以做到O(n2log2w)O(n^2log_2 w)O(n2log2​w)。Subtask1十分的简单,只需要随便给一个点放一个就行,不选的那个就是最小的。int minValue(int n,int w){ a[0]=1; playRound(a,b); for(int i=0;i<n;i++) if(!b[i]) return i;}Subtask2首先考虑

2021-02-25 08:32:32 43

原创 LG模拟赛#4 T3 轮廓线Dp+奇妙的优化技巧

正题有一个 nnn 行 mmm 列的网格,其中一些相邻的格子之间有隔板,你需要在网格中放置如图所示的五种骨牌,满足以下要求:1.每种骨牌可以使用任意次,也可以不使用2.骨牌不能越过隔板3.两块骨牌不能有重叠部分4.每个格子都被骨牌覆盖求有多少种方案,答案对 100000007100000007100000007 取模。好难想到100pts,考场上优化了半天,还是50pts。首先很容易想到O(n22n)O(n^22^n)O(n22n)的朴素轮廓线Dp。考虑怎么优化?斜着考虑就可以了。即

2021-02-24 21:57:17 55

原创 LG模拟赛#3 T3 另一个签到题,概率期望NTT

正题你有一些线段 (l1,r1),(l2,r2),…,(ln,rn)(l_1, r_1), (l_2, r_2), \dots, (l_n, r_n)(l1​,r1​),(l2​,r2​),…,(ln​,rn​)和另一些线段 (s1,t1),(s2,t2),…,(sn,tn)(s_1, t_1), (s_2, t_2), \dots, (s_n, t_n)(s1​,t1​),(s2​,t2​),…,(sn​,tn​),计算 ⋃i=1n(︀[li,ri]×[︀spi,tpi]︀)︀\bigcup_{i=1}

2021-02-23 11:51:09 42

原创 LG模拟赛#3 T2 签到题

正题你面前有一个来历不明的 01 序列 a0...m−1a_{0...m-1}a0...m−1​ ,为了调查明白这东西是从哪里冒出来的,你想知道有多少个整数 x∈[0,L]x \in [0,L]x∈[0,L] 满足 ∀i∈[0,m−1],popcount⁡(x+i) mod 2=ai\forall i\in [0,m-1], \operatorname{popcount}(x+i)\bmod 2=a_i∀i∈[0,m−1],popcount(x+i)mod2=ai​。popcount⁡(x)\opera

2021-02-23 11:44:41 28

原创 LG模拟赛#2 T3 搬题

正题可怜的出题人(跟九条可怜没有关系)要给 nnn 个地方出题。但是出题人太累了,他决定把以前给这些地方出过的题重新搬一搬。这 nnn 个地方以 1,…,n1,\dots,n1,…,n 编号。出题人总结出了他们之间的联系,是一个树形。如果出题人把以前给第 iii 个地方出的题搬到第 jjj 个地方,那么他希望 iii 和 jjj 在这棵树上的距离越长越好。于是出题人需要决定一个排列 p1,…,pnp_1,\dots,p_np1​,…,pn​ ,要求最大化S=∑i=1ndis(i,pi)S=\sum

2021-02-23 11:21:51 23

原创 LG模拟赛#2 T2 /kk公司,贪心合并

正题/kk 公司有很多 /kk,还有很多 /cy。除了老板之外,每个人都有一个直属的上司。某天他们想要拍一张合照。出于尊敬,每个人都必须站在自己的上司的右侧(不需要紧挨着)。但是老大认为 /kk 站在 /cy 的左边不好。合照中每有一对 /kk 和 /cy,使得 /kk 站在 /cy 的左边(不需要紧挨着),那么老大的愤怒值就会增加 111。请你帮忙最小化老大的愤怒值。即,把所有 /kk 和 /cy 排成一排,使得每个人都要站在自己上司的右侧,并且最小化iii 站在 jjj 的左侧,并且 iii

2021-02-23 10:58:02 41

原创 LG模拟赛#2 T1 无聊的题目,powerful number

对 n=p1a1p2a2…pkakn=p_1^{a_1} p_2^{a_2} \dots p_k^{a_k}n=p1a1​​p2a2​​…pkak​​ ,定义f(n)=min⁡(a1,…,ak)×max⁡(a1,…,ak)f(n)=\min(a_1, \dots, a_k) \times \max(a_1, \dots, a_k)f(n)=min(a1​,…,ak​)×max(a1​,…,ak​)特别地,规定 f(1)=0f(1)=0f(1)=0。求∑n=1Nf(n)\sum_{n=1}^N f(n)∑n

2021-02-23 10:49:56 32

原创 LG模拟赛#1 T3 独立集分裂,值域分治

正题给定一个 nnn 个点 mmm 条边的连通图,求独立集的数量。tips: 一个点集是独立集当且仅当点集中任意两点之间没有边相连,空集也是独立集。很容易就可以想到一种折半搜索的方法,就是将点平均分成两堆,对于每一堆处理出选某个子集是否可行,再对第二堆做一个子集前缀和。显然,若第一堆选了一个子集的点,那么可选的第二堆的所有集合必然是某一个子集的全子集,我们只需要找到这个子集即可,也很简单,只需要将与第一堆中子集的点有连边的点剔除即可。时间复杂度O(2n/2)O(2^{n/2})O(2n/2)另一种

2021-02-23 10:29:04 22

原创 LG模拟赛#1 T2 肯德基,powerful number,寻找构造函数的规律

正题求 nnn 以内所有正整数的最大平方因子的和。答案对 2642^{64}264取模。tips: xxx 是 yyy 的平方因子,当且仅当 xxx 是 yyy 的因子且x\sqrt xx​恰为整数。显然设F(x)F(x)F(x)为x的最大平方因子。容易发现F(x)F(x)F(x)是一个积性函数,且F(pk)=pk−(kmod  2)F(p^k)=p^{k-(k\mod 2)}F(pk)=pk−(kmod2)既然是求一个积性函数的前缀和,自然就想到了使用杜教筛或者min_25min\_{25}mi

2021-02-23 09:56:41 54 2

原创 LG模拟赛#1 T1 石子分裂,差分+堆

正题有 nnn 堆石子,第 iii 堆石子有 aia_iai​个石头。你可以进行最多 mmm 次分裂操作,每次操作可以将一堆石子分为两堆(操作前后的石头数量总和保持不变)。你需要最小化每堆石子的数量的平方和。很容易可以想到,每堆石子的价值和分裂次数的关系是凹性的。分的越多次,价值下降的越慢。所以我们可以用一个堆来维护下一个要将那一堆石子进行分裂,堆中按照新分裂相比上一次减少的价值从大到小排序,每次取出一堆石子,将新的价值计入答案后,计算分裂多一次该堆石子产生的新贡献。#include<bits

2021-02-23 09:33:10 25

原创 powerful number,积性函数求解前缀和的特别方法

powerful number指的就是每一种质因子的指数都≥2\geq2≥2的数。powerful number一定能被表示为a2b3a^2b^3a2b3的形式,当指数为偶数的情况下可以放到前面,当指数为奇数的时候可以拆一个3出来,然后把剩下的放到前面去。这样就可以得知1到n的powerful number的个数为∑i=1n(ni)13\sum_{i=1}^{\sqrt n} (\frac n i)^{\frac 1 3}∑i=1n​​(in​)31​,积一下分就可以知道是O(n)O(\sqrt n)O

2021-02-22 07:14:55 109 2

原创 备忘录

wqs二分只能用在限制为每次+1的一维而且另外一维的变化是凹或者凸函数的时候

2021-02-21 19:37:54 27

原创 Check,Check,Check one two!,洛谷P5115,SAM fail树上合并答案

首先我们考虑对于一个点对(i,j)(i,j)(i,j)来说,要找到前面极长的匹配aaa,后面极长的匹配bbb,贡献是两者长度的乘积(a+1)∗(b+1)(a+1)*(b+1)(a+1)∗(b+1),我们考虑在SAM上(i+p,j+p),p∈[0,b](i+p,j+p),p\in[0,b](i+p,j+p),p∈[0,b]两个endposendposendpos合并时统计(i,j)(i,j)(i,j)的贡献。由于后缀自动机上两个endposendposendpos的LCALCALCA的maxlenmaxle

2021-01-28 20:46:50 50

原创 CF888G Xor-MST,B算法或者一个更美妙的解法

正题尝试写了一个B算法,T飞了,而且代码调了很久。就是每次从每个集合里面伸出来一条最小的边,可以用01Tire01Tire01Tire去找,然后每次将有连边合并为一个。最多合并log⁡2n\log_2 nlog2​n次,每次时间复杂度O(nlog⁡2S)O(n \log_2 S)O(nlog2​S),时间复杂度正确?找那条最小的边很麻烦,还要维护每个点对应的集合,还要支持每次删除,所以我使用了离散化来处理,省去每次重新插入的时间复杂度,不过还是T飞了。附上代码仔细想想就可以得到一个更美妙的解法,在

2021-01-10 15:29:00 131

原创 [CTSC2008]祭祀,神仙构造结论

正题近期做的神仙题。偏序集合:其中有些元素之间没有大小顺序的集合,在此题中,xxx可达yyy则称x>yx>yx>y,由于是一个DAGDAGDAG,可能没有相互可达的元素,所以DAGDAGDAG可能是个偏序集合。全序集合:所有元素都知道大小关系的集合,比如自然数集合,再比如一条链。反链:集合内两两元素之间都没有大小关系的集合。发现要我们求的是一个偏序集合的最长反链。根据Dilwoth定理:最长反链的大小等于最小全序集合划分数。在一个DAGDAGDAG中,我们先要将所有的偏序关系

2021-01-10 15:18:59 69

原创 [SDOI2019]热闹的聚会与尴尬的聚会,贪心证明正确性

正题构造一个贪心即可。题目的限制实际上是要满足n<(p+1)(q+1)n<(p+1)(q+1)n<(p+1)(q+1)对于前面的,我们每次取走度数最小的,并将其与周围的点的连边断掉,观察在此过程中图的最小度数最大是多少,记为ppp。对于后面的,我们每次取走度数最小的,并将其与周围的点删掉,并将周围的点和他们周围的点的连边删掉,每次取出一个点,q+1q+1q+1。那么p,qp,qp,q即为合法的答案,因为第二次每次删掉的点数一定不超过p+1p+1p+1,所以满足q≥np+1q\ge

2021-01-10 14:38:35 46

原创 Stoer-Wagner算法,求解无向图的最小割

正题Portal这种思想值得学习!我们知道最小割会将集合分为两部分S集和T集。考虑随意选出两个点A,BA,BA,B,显然在一个最小割中这两个点要么在同一个集合,要么不在同一个集合。在同一个集合十分好做:我们只需要将这两个点合并起来看作一个点考虑就可以了(边加权合并),因为可以简单分析得到,对于任意的一个点CCC,要么与A,BA,BA,B在同一个集合,要么不在同一个集合。如果我们知道不在同一个集合怎么做,我们就可以每次选两个点出来求一遍答案,然后合并(即考虑在同一个集合的答案),然后求所有这样答案

2021-01-08 22:11:22 43

原创 最小割树(Gomory-Hu Tree),任意两点最小割

正题Portal可以得到这个定理:用一组最小割将S集和T集分开,则S集的一个点到T集的一个点的最小割权值都等于这个最小割权值。具体证明大概是考虑三个点之间的割:设三个点a,b,ca,b,ca,b,c若割(a,b)(a,b)(a,b)后,ccc在a集,那么存在割(a,b)≥(a,b)\geq(a,b)≥割(c,b)(c,b)(c,b)很好证明,因为ccc最多走回aaa之后然后再开始割,这样得出来的割一定不会比原来大,如果ccc在bbb集是相同的,因为这个定理对于任三点都适用,所以可以得到割(a,b)

2021-01-08 21:55:32 169

原创 最小树形图,一个只有模板题的算法

正题很快啊。这道题就是模板题了。最小树形图指的是一个图(V,E)(V,E)(V,E),满足其为弱连通图且存在一个点没有入边,其他点恰好一条入边的有向图,也就是一个有向外向树的形式。算法流程是这样的:1.找出最小边集。由于在这个图中,除了根节点外每一个点都有且仅有一个入度,所以我们可以从这里入手。因此找出每一个点的入边中权值最小的边mmin[i],同时如果存在一个除了根节点以外的点没有入边,则可判定为无解2.判断是否有环。怎么判有环可以直接看代码,如果没有环而且没有缩点,那么直接返回就好了。如果有

2021-01-07 20:57:03 38

原创 二分图最大权完美匹配,在独特问题上比费用流更优秀的算法

正题尽管以前已经写过一次相关的学习笔记,奈何时间太早,早已忘光,而且学习了新的,时间复杂度更优秀的算法。想与大家在这里分享。首先我们要了解几个概念。顶标txi,tyitx_i,ty_itxi​,tyi​分别表示的是人为赋予的左右点的点权,在实际预算过程中,需要满足txu+tyv≥wu,vtx_u+ty_v\geq w_{u,v}txu​+tyv​≥wu,v​相等子图:每一个点以及满足txu+tyv=wu,vtx_u+ty_v=w_{u,v}txu​+tyv​=wu,v​的边构成的子图。定理:若相等

2021-01-07 20:36:07 40

原创 开门游戏,51nod1372,数竞+简单的莫比乌斯反演

正题首先要解出F(n)F(n)F(n),这东西也是问老Win才会的,不过会了也没什么用。然后剩下的就是个求111到n!n!n! 与n!n!n!的gcd之和。∑i=1mgcd(i,m)∑d∣md∑i=1md[gcd(i,md)=1]∑d∣md∑g=1mdμ(g)mdg∑T∣m(id∗μ)(T)mT(φ∗id)(m)\\ \sum_{i=1}^mgcd(i,m)\\ \sum_{d|m} d\sum_{i=1}^{\frac{m}{d}} [gcd(i,\frac{m}{d})=1]\\ \sum_{

2020-11-26 13:06:42 52

原创 夹克老爷的逢三抽一,51nod1380,贪心

正题首先要知道一个结论,如果在连续三个A,B,C中最大的是B,那么要么取B,要么取A,C,要么哪个都不取,不可能只取A或者只取C。那么就有这样的一个决策:选一个最大值,如果不选最大值,那么要么选周围两个,要么全都不选。所以只要假装选最大值,将周围两个删掉,将最大值的权值改成周围两个点的权值和-最大值权值就可以。#include<bits/stdc++.h>#define pli pair<long long,int> using namespace std;cons

2020-11-26 12:55:34 44

原创 闯关游戏,51nod1450,概率期望

正题所有关都是要至少获得一颗星的,所以打关有两种方案,一种是等到赢就放弃,一种是等到两颗星才放弃。等到赢的时候还是有可能等到两颗星的。而且我们要按照YiYiYi从大到小来排序DpDpDp,这个可以通过观察DpDpDp式子发现,YiYiYi大的时候取到两个星的期望会小,而且等到赢就放弃的时候取到两颗星的概率也会变大,具体来说就是优先冲那先YiYiYi大的。#include<bits/stdc++.h>using namespace std;const int N=2010;long

2020-11-25 22:01:06 30

原创 解方程,51nod1477,不明公式证明算法复杂度

正题非常的amazing啊!想了一下午发现直接做就可以AC。至今不知道怎么证明复杂度,也问了很多巨佬,绿色夹克衫太忙了/kel发现这个J(x)=(p1a1+1)(p2a2+1)...(pkak+1)J(x)=(p_1^{a_1}+1)(p_2^{a_2}+1)...(p_k^{a_k}+1)J(x)=(p1a1​​+1)(p2a2​​+1)...(pkak​​+1)。我们要知道有多少个J(x)=AJ(x)=AJ(x)=A直接DpDpDp即可,发现101210^{12}1012内的最多数的约数并不

2020-11-25 21:26:18 44

原创 城堡迷阵,51nod1527,贪心

正题做法就是设f[i]f[i]f[i]表示i的子树的答案,sum[i]sum[i]sum[i]为iii的(子树的边权和+i到父亲的边权)∗2*2∗2,sz[i]sz[i]sz[i]表示iii子树的的大小。那么若给xxx的子树一个遍历顺序aaa,那么就有:f[i]=∑i=1sonif[ai]+(∑j=1i−1sum[aj])sz[ai]f[i]=\sum_{i=1}^{son_i} f[a_i]+(\sum_{j=1}^{i-1} sum[a_j])sz[a_i]f[i]=i=1∑soni​​f[a

2020-11-25 21:15:11 40

原创 图上的游戏,51nod1481,bitset优化遍历

正题大概想了一个晚上吧,首先可以发现就是将一个独立集不断合并起来之后,成为一个链的形状,相当于有边的只有相邻的两个独立集。考虑枚举链的一个端点,容易发现存在一种最优方案满足这个端点的独立集只有一个点,否则可以将同一个独立集的其他点放到链上第三个独立集,不影响后面的顺序而且只会使答案变得更大。枚举完这个点之后,考虑当前层的点的连接点有没有被加入到独立集,如果没有,那么就加入到下一层,否则,如果和当前点在同一层(也就是有奇数环),那么无解,否则就不用理(肯定会在当前点的上一层或者下一层),肯定合法。这个

2020-11-25 21:06:53 44

原创 专题总结:组合数学

正题 排列组合 1.不相邻的排列 从n个元素中选出k个,使得这k个元素两两不相邻: 证明考虑先把k个元素取出来,然后再给这k个元素之间直接插一个元素,再编号,显然一种选法只会被算到一次. 2.错位排列 重新排列ai,使得每一个元素不在原来的位置上的方案数. 考虑Dp,.为什么?因为当前面有n-1个数错排好的时候,第n个元素可以选择任意一个元素进行交换,当前面有n-2个元素错排好的之后,剩下一个元素,必与n交换,...

2020-10-09 19:05:24 71

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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