一句话题解(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容斥

推一下得到一个求\(\large \sum_{i>=l}^n \binom{i}{l}(-1)^{i-l}\)的东西,这个可以从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,所以一次的时间最坏是\(O(\sqrt n+\sqrt {n/2}+\sqrt {n/4}+...=\sqrt n)\)

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】锻炼

操作等于对两个面异或,把每一维独立,每一维分成最小的若干\(2^k\),组合成\(2^i*2^j*2^k\),然后后缀和计算,维护\(2^k\)就直接线段树

6032. 【GDOI2019模拟2019.3.26】吃

把k次方拆开成算每个的次数然后组合,设f[i,j,k]表示到第i列有j列选了总次数为k,直接搞是O(n^3k^2),硬点次数>=1,最后组合上 次数为0但选了的,时间变为O(n^2k^3)

PE756

化式子,得到\(\sum f(x)\binom{n-x}{m}/\binom{n}{m}\),即枚举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

posted @ 2021-04-30 17:08  gmh77  阅读(167)  评论(0编辑  收藏  举报