一句话题解(2021.5)
7094. 【2021.5.28 NOI模拟】菜肴挑选(dish)
n为奇数:连所有等腰三角形,发现每条边作为腰两次底边一次
n为偶数:先对n-1做,然后做距离=1(a,b)的(a,b,n)2次,距离=2(a,b)的(a,b,n)1次
发现此时n和其他的都是6次,距离1的5次距离2的4次其他3次,剩下的做n-1的腰>=2的等腰三角形
距离1的只能做底边,距离2的只能做腰,其余的都可以
7093. 【2021.5.28 NOI模拟】一道计算几何的模板题(geometry)
求出每个x的maxminy做凸包,求可以把环拉出来线段树,或者暴力倍增
常数更小的做法是枚举max/miny,把环反过来用并查集取覆盖能取到的x
注意重点和共线
7092. 【2021.5.26 NOI模拟】喂鱼(fedfish)
回滚莫队,用链表做到O(1)插入撤销,两端都在块内的先加跨过整区间的,再暴力加内部的
7091. 【2021.5.26 NOI模拟】矩阵(matrix)
burnside行列,对于一个a行b列的置换会产生(a,b)个环
暴力拆分数一边,另一边dp,p(√n)很小
7090. 【2021.5.26 NOI模拟】愤怒的 PTY(angrypty)
发现k等于gcd,ij等于剩余部分,所以Ans=ΣΣn/lcm(i,j),枚举lcm得到Ans=Σσ0^2(i),min25
6244. 【NOI2019模拟2019.7.1】为了部落
prufer搞森林,把1~m的拉出来每次找叶子删,序列前n-m-1是n最后一个是m
写出总度数确定的式子,问题等于把1~m放入序列,满足每种次数不超K
设f[i,j]表示放了i个j种不超K,转移考虑加上当前的为K+1的方案,减掉,组合数拆开算
6250. 【NOI2019模拟2019.7.3】魔法咒语
容斥,枚举天数和长度,用egf容斥
推一下得到一个求的东西,这个可以从l=n开始倒推,每次sum*2然后调一下
6248. 【NOI2019模拟2019.7.3】光影交错
求f[i]表示从i往后走的期望步数,设f[-inf]=0,f[+inf]=1/(1-p),中间解方程,inf设为3e6
7098. 【2021.5.29 NOI模拟】究竟(wonder)
7096. 【2021.5.29 NOI模拟】签door♂题(ohyessir)
签door♂失败
7097. 【2021.5.29 NOI模拟】Rhuzerv(rhuzerv)
两个问题独立,分开瞎推
arc120
A:操作后的就是新的max
B:只有一斜上颜色全相同才合法,否则找到相邻不同的两个换一下就非法,统计
C:ai加i,每次操作交换相邻的
D:最优显然是把前n和后n匹配,用栈维护
E:先求差,每次把若干段-1把中间间隔的一段+1
最优肯定是先分成若干段,然后每段直接消掉,分的段初始就确定了后面再确定肯定不优,并且不会先-1后+1,否则不好分段
再观察一下,发现-1拆开后的段长度不超过2,否则可以在中间继续分,因为里面-1+1结果不变但可能多分一段,所以尝试分段不会劣
设f[i]表示搞完前i段的答案,转移枚举上一段即可,只有最多3个
F:分治fft,O(n)?
*F2:
gym103069
A:设f[i,x,y,1~4]表示当前到i,后两个是xy,选了多少位,可以把i滚动
B:离线,等于求每个矩形内的最小值,枚举上下边界,把中间的搞笛卡尔树,暴力n^3
C:反着得到rand()%i,变成%lowbit(i),每次的x写成初始若干位的异或,消元后枚举自由元O(n)一次判断
D:两人一定是有一段相同的,枚举这段的端点,得到(a,b)表示走了a条公共的b条各自的,把ab偏序去掉后只有n对,每对log^2随便二分判断
E:
F:sort
G:离线r,分奇偶维护(a,b,c)表示奇增量,偶增量,历史和,每次rev一下然后+奇数和
维护rev,奇增量系数,偶增量系数
H:
I:模拟,各种二分,注意+1-1
J:
K:转化,变成B构造最优的4张牌使得能打赢A
结论:A无同花顺必败
若A无同花顺无四带一,则B可以在剩下8数字中选四个,然后随便拼一张牌来四带一
若A是四带一,如果不是四个一则B可以选四个一,否则B可以找一个公共的来组同花顺
所以A一定是同花顺,只有最大的牌是公共牌时B才能往后接四张来打赢A,判一下边界以及皇家同花顺A必胜(无论1是否公共)
究极内鬼:把同花顺判成五连炸
L:考虑每个质因子次数%2,相邻偶数即最后全0/全1
M:
7089. 【2021.5.18 NOI模拟】排序(sort)
k=1:网络流,建i->T连ai,每个限制建新点x连S->x连wi,x->xi/yi连inf,则要么割xi和yi要么割wi
k>1就a*,实现可以用trie来找,由于估价精确所以总网络流次数nk
7088. 【2021.5.18 NOI模拟】复原 (restoration)
对一个大小为x的环操作后得到(x,k)个x/(x,k)大小的环,分类做背包
时间复杂度:设a=x/(x,k),c=(x,k),则有x=ac,(ac,k)=c,所以c是k的约数,每个a共有最多d(k)个,总复杂度为O(sum*d(k))=O(n*d(k)),要卡常
7087. 【2021.5.18 NOI模拟】差异(difference)
离散化权值线段树,维护当前每个位置的方案,最小值一定是一段a+1一段a一段a+1,可以归纳
转移讨论,除了继承外还有把上一段的a加到当前段的a+1上,然后把[1,L-1]和[R+1,n]清空,要卡常
arc119
没打
A:神必做法:先设a=N,b=c=0,之后不断减少a
发现当a%2=0时把a/2,b+1优于不变优于a-1,c+2^b,当a%2=1时只能a-1,c+2^b,判一下
实际直接枚举b=0~60就可以了
B:一个0不用移动的充要条件:ST中对应位都是0且前面0的个数相等,必要显然,充分可以分左右移来构造
C:合法的充要条件:段内奇=偶,因为可以把a,b,c变成a,b+a,c+a再变成0,b,c+a,可以实现奇数/偶数位内部移动,相邻的可以相消
D:把同行/列的红色格子连起来,得到若干红色独立块,考虑每一块的贡献
结论:设块的大小为a*b,则存在一种方法,使得有a行b-1列,或a-1行b列被消掉
首先不可能a行b列都选,否则去掉最后一次的行/列还有列/行存在,最后的红色格子会被消掉
然后把行/列取反,变成有若干行列选择的,每次把选择了的红色格子十字扩展
证明这样一定可以全覆盖(还原成初始状态),若无法还原则消完后得到了一个稳定的红色独立块,且不存在初始有红色格子在块延伸的行/列上且后面被消掉,否则消掉时必然可以扩展一行/列来打破独立块,也就是说这个块是初始就存在,而不是消去部分后得到的,所以矛盾
求出最优的总行覆盖数,然后确定每个块怎么选,方案就模拟上面的过程
E:把a放到数轴上,等于顺序连线a1~n,操作等于把a->b->...->c->d变成a->c->...->b->d,画图发现只有ab,cd同向且相交时有正贡献,贡献是ab,cd重合部分*2,排序维护max
F:设f[i,j,k]表示考虑完[1,i],最后一段红/蓝的dis为j/k的方案,转移考虑下一个是什么
发现始终有|j-k|<=2,否则在多的那个往后接时另一个可以用2步来走到,维护一下即可O(n^2)
PE757 Stealthy Numbers
打表,得到A072389,排序去重
形式的证明:
有c-a=b-d-1=x,则a=xy,c=x(y+1)
有N=ab=cd,即yb=(y+1)d,拆开得到y(b-d)=d,代入b-d=x+1得d=(x+1)y,再得b=(x+1)(y+1)
所以有N=x(x+1)y(y+1)
code:https://gmoj.net/senior/#main/code/838579
PKUWC2020 D1T1
考场上直接爬
把暴力dp写成矩阵,打表发现123456和123465可以用行+列变换来转换,即把原p[i]=i的排列变成i->p'[i],两维同时变
(可以当成是把节点重标号?考虑排列里的每个矩阵,变换后刚好从S[p[i]]->S[p'[i]]
然后按位确定,O(n^5)
6252. 【NOI2019模拟2019.7.4】天涯海角
树剖,对链分√链长 块,把每块的A排序维护指针,修改散块就拆开归并
这样没有额外的log,分块复杂度分析发现每次size/2,所以一次的时间最坏是
6213. 【NOI2019模拟2019.6.13】String
最优策略显然是能取就取,把每次取的分段,相当于求x+s+y,其中xy是字符,s是字符串,求任意两种xy的最小|s|使得存在某种xsy未出现
长度是log所以可以暴力,然后矩乘直到最短>N
也可以找到总长最小的,然后连有向无权边,找环,或者链上反复,讨论一下即可线性
7082. 【2021.5.10 NOI模拟】中单(bdd)
直接做是五维偏序,讨论s的大小关系+做差变成四维,cdq时间,排序一个差,A丢到trie上,发现另一差可以变成判定性问题,按位确定
这样就是三维,O(n log^2),可以把trie提前变成整体二分做到线性空间
PKUWC2021 D2T1 火山哥与打铁传说
之前刚了3h,现在直接不会了
考虑把破盾的毒鱼变成小鱼,硬点剩下的毒一定能匹配,此时只需要保证前缀和>=0
如果前缀和<0就把前面第一个-1变成+1,发现就是全体+2,所以加的最小次数可以算得
剩下的毒就是能打的数量,再加就不优了,所以就是答案
6212. 【NOI2019模拟2019.6.13】Graph
类似global round G,猜测ans2是每个强连通分量的环gcd的lcm,猜测ans1<=n^2
证明(?):https://www.zhihu.com/question/39143483
然后二分,bitset优化矩乘
7079. 【2021.5.9 NOI模拟】消除(increase)
类似arcE,写一个排列然后顺序删合法点,发现dp不好搞所以枚举x(直接搞n^4),每选一个乘x
问题是怎样不重不漏确定排列,设f[i,j]表示到i子树,有j个点未确定,硬点每个点只会在左边排列的位置最右的祖先上选
发现这样新加i时不能往前插,且确定的都在i后,直接背包合并+插值O(n^3)
arc118
A:每次+t,如果t>=100就会跳一个,算一下100n/t
B:可以二分求区间,也可以卡到floor(n*a/m),然后先把+1会减小的+1,然后堆维护+1后最小的
C:1放3*5*7*11,后面的放2*(3or5or7or11的倍数)
D:求原根,变为每次±x,±y,充要条件是gcd(n-1,x,y)=1
充分性构造,设x为奇数,按%gcd(n-1,x)分组,先每次+x得到a1,a2...,然后交替+y/-y直到碰到ai,得到a[k]-x,a[k-1]+x...a[2]+x,a[1](0)+x,然后+x即可走回0
E:设f[i,j,k,0/1,0/1]表示当前到(i,j),容斥固定了k个a=-1,当前行/列还能否放,最后乘上(sum-k)!
F:设dp[i,x]表示考虑[i,n+1],且ai=x的方案,转移dp[i,x]=Σdp[i+1,y] (ai*x<=y),设Ri表示x的上界
结论:对dp[i]插值得到的是n+1-i次多项式
证明考虑设fi(x)=dp[i,x],Fi(x)=Σdp[i,y] (1<=y<=x),则dp是fi的点值,转移有fi(x)=Fi+1(R[i+1])-Fi+1(A[i]x-1),代入x'=A[i]x-1后fi(x)的次数等于Fi+1(x)的次数,而Fi(x)的次数等于fi(x)次数+1
维护n+1项,每次直接对Fi+1插值,然后点值求Fi+1(R[i+1])和x=1~n+1的Fi+1(A[i]x-1),直接搞是n^3,当a=1时只用点值Fi+1(R[i+1]),所以是O(n^2logm)
abc176F - Brave CHAIN
简单的想法:设f[i,x,y]表示当前考虑i,i+1,i+2,之前剩下x,y两张牌的答案
这样是n^3的,考虑硬点x,y非0则必匹配,直到匹配完为止,这样的话如果xy都非0则可以直接跳到下一个x/y出现的位置,中间的直接前缀和
对于每种状态xy,一共会在sum[x]+sum[y]个位置出现,对于x来说就是sum[x]*n,n种加起来就是n^2,很河里
具体来说,设f[i,x]表示当前考虑到[i,i+2],无匹配/有x准备匹配,设g[i,y]表示当前考虑到i所在块(连续三个),有a[i],x准备匹配且先匹配a[i]
优化点在于把牌a[i]和位置i记一起了,而且可以直接跳到下一个a[j]=a[i]的j,根据上面的性质中间可以跳过
讨论亿下即可,时间O(n^2)
感觉可以枚举新加的三张的情况,分成 和现有的匹配/自己匹配/新加入 三类,应该可以减少讨论
7076. 【2021.05.08 NOI模拟】膜拜(orz)
把边看成点,a树的边(边权为两端点权max)会对b树路径上的边连有向边,反之亦然,u->v选了u就要选v
倍增优化连边tarjan,拓扑求出w(可以在tarjan里求),询问再倍增,O(nlogn)
不难写但很长,而且卡常(树剖log^2吊打std
6217. 【NOI2019模拟2019.6.14】最大面积
把[L,R]求和得(x,y),发现答案一定在(x,y)的上凸壳上(A>0时,否则反过来)
分治,每次把跨过中间的求闵可夫斯基和,总个数nlogn个,建凸壳按x排序建,询问二分,总复杂度O(nlog^2n+qlogn)
6216. 【NOI2019模拟2019.6.14】序列计数
转移写成矩阵,前缀和维护做到O(n*Σ^2),发现原矩阵是每次把一行设为总和,逆矩阵是把其他列减去当前列,维护一下可以O(n*Σ)
6215. 【NOI2019模拟2019.6.14】硬币游戏
发现可以把一个组拆成独立的a,a+b,和原问题等价
显然分开每个都是凸的,扫过去维护分界点
7075. 【2021.5.4 NOI模拟】网格(grid)
染色v[i,j]=(j-i)%n+1,设行i的优先级为v[i,j]从大到小,列j的优先级为v[i,j]从小到大,枚举颜色,把合法的格子拉出来跑稳定匹配(配过的或已经填了的优先级最低),最后一定有解
稳定匹配:n男n女配对,每个人有对面的优先级排序,求一组稳定解使得没有x和a满足xa未匹配且二者彼此比现在的更优
策略:每个无配偶的男按自己的优先级顺序追求女(一轮轮搞),若女被多男追求则选自己最优的(之前有男就甩掉),最后一定有解且稳定
证明:
①有解:若某男最后无女,则存在1女无男,则该男已追求过所有女,而每个女被追求后一定会有男,所以矛盾
②最优:xa未匹配,若x未追求过a,则x当前的优于a;若x已追求过a,则a当前的优于x
时间O(n^2)
关于本题,对于一个格子(x,y),若在其某个合法颜色没有选,则存在(x,j)和(i,y),由于跑的是稳定匹配,所以(x,j)优于(x,y)或(i,y)优于(x,y),而发现任意(x,y)一共有n-1个这样的格子,每次少1个,最后一定轮到自己匹配
时间O(mn^2)
7074. 【2021.5.4 NOI模拟】集合(set)
离线r,对区间取反,线段树维护max(后缀不在区间内的l),每次区间覆盖,查找线段树二分
7073. 【2021.5.4 NOI模拟】拆分(partition)
当k>0时dp,总数不超√n,当k=0时整数拆分
6033. 【GDOI2019模拟2019.3.26】锻炼
操作等于对两个面异或,把每一维独立,每一维分成最小的若干,组合成,然后后缀和计算,维护就直接线段树
6032. 【GDOI2019模拟2019.3.26】吃
把k次方拆开成算每个的次数然后组合,设f[i,j,k]表示到第i列有j列选了总次数为k,直接搞是O(n^3k^2),硬点次数>=1,最后组合上 次数为0但选了的,时间变为O(n^2k^3)
PE756
化式子,得到,即枚举x考虑剩下m-1个的方案,(xi-xi-1)就再加一个数,这个数刚好有(xi-xi-1)种取值,所以还是m个,容斥掉全在i+1后的(在x前的第一个就是算方案的,所以至少要有一个)
递推维护组合数
https://gmoj.net/senior/#main/code/837350
CF1515
爬了
A:注意到a互不相同所以顺序排,如果sum=x就把相邻的交换,无解当且仅当Σ=x
B:只有横边或斜边,否则写成a+√2b,平方得到无理数√2ab,矛盾
C:一开始没看到h<=x,注意到后可以发现如果每次操作最小的,最小的加的数不超x,所以不会超次小的x以上,堆维护
D:先去掉直接匹配的,考场上想的是把少的那边消掉多的后,给多个那边分配 多-少 个,使得奇数个数最少,实质是一样的但是很阴间
实际直接消就好了,去掉0的后每对贡献至少为1,剩下的奇数对贡献2,当奇<少时奇数消完,n是偶数所以两边都是偶数,可以到下界;否则剩下偶数个奇数,匹配即可,这样显然是最优的
E:最后结果是段-空-段-空-段这样的,段中间的枚举第一个位置左右组合,然后n^3dp(长i空j枚举k)
F:必要条件是sum>=(n-1)x,同时也是充分条件,证明把点权随机丢到相邻边上,至少一条>=x
直接贪心构造dfs,每次先走正贡献的,然后再走负贡献的,能往下合就先合并否则最后合并(可能下面的不够合成一个点),一定有解
G:分强连通分量处理,显然是找到里面最小同余x,一个点是x其他可以走到他然后多走几圈消掉得x
类比xor和无向图,定义环为两条x->y的路径,则可以1->x->(a)y->1,%x=0时把一条换成1->x->(b)y->1,这样就得到了(b-a),所以对所有环取gcd(b-a)
考虑找环,任意找一个外向dfs树,每条非树边刚好对应一个环,其他环可以用找到的环组合,询问取gcd判
*H:
*I:
7071. 【2021.4.30 NOI模拟】图书馆 (library)
暴力,找到补完后不超的数(3w多个),每个每次加奇数因子补到偶数的积,判断lcm就是偶%奇=0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-04-30 CF704C.Black Widow
2020-04-30 CF704B.Ant Man