• 一句话题解(2021.4)


    7069. 【2021.4.28 NOI模拟】匹配(match)

    打表发现的神必结论:设bi=i&pi,把b的计算次数写下来发现只有1/-1,再发现就是(large (-1)^{popc( ext{异或和};b_{0 ext{~}n-1},0 ext{~}n-1)})

    发现次数只与1的位数个数奇偶有关,且每个i独立,每个bi可能取aj (j⊆i),分奇偶对a高维前缀和即可快速求得Σa

    题解做法:实际是个行列式,(i,j)是a[i&j],设ai=Σbj (j⊆i),发现把a写成b后消元刚好得到Πb,因为对于每个[i,i],每个j⊆i都会在[i,j]时消掉b[j,j],则[i,i]只会剩下b[i,i]

    逆FMT即可

    6210. wsm

    观察可得,答案就是把长度AB从1开始交替乘变为AB的方案,证明考虑构造,每次把A加上A+合并后len*k,这样总长就乘k了

    必要性感受一下,如果每次不这样就会在最终序列产生空格/重合,所以充要(确信

    然后枚举交替乘的次数,把因子拆开反演即可

    6152. 【GDOI2019Day2模拟2019.4.29】Endless

    SA+哨点找出所有平方串,然后st表+并查集维护

    第i层维护长2^i的段是否合并,如果两个xy在第i层合并了则[x,x+2^i)和[y,y+2^i)已合并,递归往下即可,总nlognα

    PE755 Not Zeckendorf

    直接暴力每个数是否出现,这样是2^62,只要把1~38个组合的结果预处理后面2^24暴力即可

    7067. 【2021.4.24NOI模拟】对称线性规划问题

    构造最优解,每次把i和4n-i+1放一起,这样变成了n个点,每个点度数4有自环,找若干哈密顿环(度数=2)覆盖

    构造:欧拉回路取第奇数条边,若一个点无自环则两组出入各+1共度数2,一个自环两种也都为2,两个自环显然

    7066. 【2021.4.24 NOI模拟】ehzeux与圆周(circle)

    agc028Dhttps://www.cnblogs.com/gmh77/p/14012638.html

    7065. 【2021.4.24 NOI模拟】樟树

    类似回滚莫队的树分块+可撤销并查集,分块按深度从下往上根号分,O(n^1.5 log)能过很不河里

    CF1517

    A:除2050后求数位和

    B:等于把行重排列,使得最后每列最大值和最小,把全局前m最大按顺序排在对应行前即可

    C:神必构法:每次新加一个数,贪心往左走,否则往下走

    实际上可以按对角线考虑,在当前列要停下的那个的两边会往中间靠,所以方案是唯一的

    D:判k为奇数,偶数的话一定是走k/2步后原路返回否则两条路一定有更优的,所以全部走k/2步后答案*2

    E:阴间讨论,最后一定是(P)C..CPC..PCP..P(C)这样,硬点PCC..和P..PC段长度>=3,其余情况可以为空,线段树计算,再加上P..PC..P的情况

    这样PC.....C和P....PC会算重,判掉

    F:假设答案>=ans,则把每个没选的点(dis>ans)往外扩ans步后仍有点未被覆盖,枚举ans树形dp,维护f[i,j]表示往上扩j步和g[i,j]表示最深没扩到的点深j,转移前缀和一下即可O(n^3)

    G:按xy奇偶这样染色:

    323
    010
    323

    1是关键点,则不合法的路径一定是相连的0-1-2-3,建图最小割

    H:

    CF878

    切AB就赢了

    A:拆位,变成每一位不变/赋0/赋1/异或,最后用三次解决

    B:接起来后原本首尾的位置会跑到段中间的间隔里,如果%K=0就可以消掉继续,递归累加

    注意特判若最后一层消掉则可以全消,答案=0

    C:对于一个块的每一维维护min和max,用set维护所有块,满足相邻的完全偏序,新加一个块就找到最后一个可能合并的,合并后继续搞,答案就是set里权值最大的块大小

    D:WC2021T2,设f[i,s]表示如果=1的全部小于=0的,最终会落到哪里,点乘min取or max取and,bitset优化

    初值f[i,s]=[i∈s],因为初始为i哪块包含i就在哪,最后排序a从大到小枚举算状态直到f[s]=0,去掉最后一个刚好转变,所以答案就是这个

    E:离线扫右端点,不断加入贪心合并直到新加的块为负,则得到的是正负负负这样的,最优性显然(?),也是变了更优的话之前就会变

    左端点二分整块,散块直接合成一块算,因为如果断开后变成了多块且无法合并,则加上原始块的左边后更无法合并(乘的系数变大,负号不变)

    一些细节,[L,R]去掉L后剩下的系数可以整体/2,每个块就从1开始了

    当正块>1e9时设为1e9+1,因为每次*2减不回去

    还有注意是合并到得到负块为止,因为就算前面是负的一个正块合并上去也可以*2,更优

    CF1508

    A:找到0or1>=n的两个,把相同0/1的合并剩下直接放,这样可以少至少n,总<=3n

    B:发现可以根据ai<ai+1和ai>ai+1分为0/1,则01就是K-1的二进制,把相邻的0找出来中间直接构

    C:先把补图生成树建出(同CF599Bhttps://www.cnblogs.com/gmh77/p/14678733.html),然后把剩下的边补成生成树,要把一条边变为异或和x(分开显然更劣),设原图边为黑补图为白

    若存在未加的白边则显然新代价=0,否则要么直接把一条白变为x,要么枚举一条未加的黑边,满足树上路径中存在白边,只需要把这条白边设为x相当于断掉,然后加上黑边的代价

    直接把最终树的黑边连起来,每次判断是否在同一个块内即可

    D:假设要把一个环归位,只需要固定一个点然后顺序交换,这样连出来放射状

    多个环就找到最低点极角排序,每次把相邻在不同环的交换,换完后环就合并了,最后从最低点开始换,这样是一个扇状图形

    E:发现把一个点归位后就是后续遍历,先暴力O(n)标记求出边的顺序,然后找到第一个不等于后序遍历的点x,则剩下部分的顺序等于把<=x的删掉后的先序遍历,求出后判断是否合法

    合法要算次数,发现每个点都会先上后下,且下时一定在1,否则反证从1到该点由于没有操作过所以单调增,若不在1则父亲更小,会先操作父亲

    所以直接算往下的次数,就是用移了的点的深度和

    F:

    GDOI/联合省选2021

    D1T1:

    枚举左边界,对于a<b的初始不翻,a>b的按a贪心翻,在扫的过程中会把一些a<b和一些翻了的a>b(按b排)强制翻转,如果m不足就把翻了的a>b按a排序翻回去

    一定不存在m+1后再主动翻的情况,因为翻了(a,b)后前面的a翻了没用,后面的全翻完了否则不会到当前a,所以不用考虑

    D1T2:

    硬点1行1列为0,则剩下方案唯一,接着用行/列间隔加减即可构出所有合法解,因为可以把任意一组合法解通过操作把1行1列变为0,即得到了初始状态,反之亦然

    接着差分约束判断

    D1T3:

    直接算,点y能被x算到的充要条件是xy强连通且存在环使得最小点>y,如果上面有点u<y由于xu强连通所以u会先被删,因此必须要有>y的环,存在的话显然不会在y之前删掉,在正反图上跑

    考场直接用桶来搞dij,时间O(nm),由于用了vector所以很慢

    实际上每次新加一条边然后bfs,这样一次是O(n+m)总O(n(n+m)),由于跑不满所以可以过

    D2T1:

    向c-1/c+1的祖先连边,每次倍增判断,由于不好确定长度所以写了整体二分+暴力来确定每个询问,log^2

    实际上直接点分然后维护f[i]表示i往上跳的min即可一个log

    D2T2:

    差分,从小到大确定,则当前max确定后前面的+b操作与现在二者无关,只与初始的a有关

    所以设f[s,i,j]表示状态s,max为i和为j的方案,每次贪心卡到刚好成为max即可最优且不重

    时间O(2^n*m*n^2)

    D2T3:

    先n^2建出支配树,则原图上的边一定是往下/返祖/终点在lca下一

    所以新加x->y后变化路径一定是1->x->y->u且不经过u的父亲,大力讨论后(lca外、lca其他子树)发现充要条件是dp[lca]+2<=dp[u],dp是支配树上深度

    然后可以类似D1T1 nm分层bfs预处理,qlog询问,总O(nm+qlog)

    arc117

    A:A-1/B-1个±1~1000,剩下用大数调

    B:排序后等于对后缀操作,ans=Π(ai-(ai-1)+1)

    C:经典把操作变为数,则发现(a+b)/2->c(%3意义下),lucas算组合数

    D:把最后的E排序,则显然只要满足相邻限制,而相邻的最小值就是dis,所以等于把整棵树遍历一边,从直径开始走最小

    E:想从下往上折线dp,发现是O(n^7),优化可以做到O(n^6)

    题解做法是把上下两半分开最后合并,每边就不用枚举层数,转移直接枚举加的点数,则新的段数可以算出来,方案数等于在段的间隔中放点,首尾放1扩展多的新加,中间放1合并放2扩展多的新加,最后变为放球问题

    总复杂度O(n^5)

    2021 计蒜之道 精英组 预赛 第一场 D

    显然有f[i]=f[i/2](偶),f[(i-1)/2]+f[(i+1)/2](奇),打表发现类似sbt,主要是求前缀max

    再打表发现后面一定是01交替构造最优,枚举上界卡位剩下交替,矩阵维护,要写高精度

    牛客挑战赛49

    A:map

    B:枚举最后非0位

    C:从大往小贪心,用物品匹配人,并查集维护

    D:回文=折半,讨论中心在哪边n/2然后暴力

    E:问题等于求 A导出子图边-B导出子图边,A要minB要max,显然等价于每条边(u,v)的点u,v+0.5,交替选点求总和(同+1-1,不同0),排序选

    F:由于是点权,可以发现等于每次任意异或两个点,而且是二分图所以异或后奇偶不变,算出奇数/偶数任选的答案即可

    虽然数据非常离谱https://ac.nowcoder.com/discuss/642482?type=101&channel=-1&source_id=0

    G:https://gmoj.net/senior/#main/show/6698

    CF1485

    A:显然到√A了就只有两次了,枚举

    B:与al,ar有关

    C:卡了一下,发现满足条件的是xb+x=a,即x=a/(b+1),且x为整数,所以a=x(b+1) (1<=x<b),此时恰好满足a div b=a%b=x,枚举b,则贡献为min(b-1,x/(b+1)),讨论+分块

    D:发现(16*9*5*7*11*13=s=720720<=10^6),黑白染色,黑色填s白色填s-a^4,打表发现a|s-a^4

    E:发现下一层的两个点中有至少一个的父亲是上一层的点,分层做,设f[i]表示i的父亲一定选的贡献,转移的两个点都要更新,维护maxmin即可,注意转移顺序

    F:设f[i]表示bi=Σaj的1~i答案,枚举上一个k转移,显然只用从得到ai不同的max(k)转移过来,用map维护

    实际是b[i]=b[k]+s[i-1]-s[k]+a[i],得a[i]=s[k-1]+b[i]-s[i-1],所以把f[k]丢到s[k-1]上,维护Σf的值,fi硬点了i必是求和

    关于最后的答案,可以在n+1处多加一个b[n+1]=0,答案就是f[n+1],因为f是求和,如果完全相同则和一定相同,不会影响,实际答案就是维护的Sum

    agc053

    A:上界是K=max(|ai-ai-1|),直接构造bj,i=(ai +j-1)/K,发现和刚好为ai且满足限制

    B:从中间往两边可撤销贪心

    C:发现一个排列的答案就是最小的d使得ai=max(a1~i,b1~i+d),因为可以把max超了的对位删掉,总次数为d

    考虑算贡献,相当于一个序列每次删一个或两个,其中一个不能是最后的,则显然删完一次后面的是独立的子问题,因此可以乘起来,预处理做到O(n)

    D:

    609. 【UR #20】金坷垃

    分段,ans[i]=∫f[i],容斥为至少g[i],求出g后反演

    gi=[y^i]Π(py+1),由于里面是二项式所以对Π(p+1)求高阶导后就是gi乘上阶乘

    求定积分,维护拆开的二项式代入点值卷积,乘i的j次下降幂就用i!/(i-j)!

    607. 【UR #20】跳蚤电话

    确定排列后结果唯一,发现每个时刻不存在两个黑点的lca为白点,设f[i]表示i子树任意排列的方案,转移枚举第一个子树前后缀和O(n)

    609. 【UR #20】金坷垃

    分段,ans[i]=∫f[i],容斥为至少g[i],求出g后反演

    gi=[y^i]Π(py+1),由于里面是二项式所以对Π(p+1)求高阶导后就是gi乘上阶乘

    求定积分,维护拆开的二项式代入点值卷积,乘i的j次下降幂就用i!/(i-j)!

    607. 【UR #20】跳蚤电话

    确定排列后结果唯一,发现每个时刻不存在两个黑点的lca为白点,设f[i]表示i子树任意排列的方案,转移枚举第一个子树前后缀和O(n)

    7049. 2021.04.07【2021省赛模拟】生命游戏(lifegame)

    打表发现按x+y奇偶分类,把每一类的每个块按最左端固定再旋转45°,则变为每个矩形每次往右上扩一格

    一共有n^2个时间段,每个时间段矩形覆盖算一下即可插值,矩形覆盖可以扫描线+标记永久化

    7047. 2021.04.07【2021省赛模拟】染色(coloring)

    注意是最终情况不同,设f[i,j]表示到第i行最后一个白色为j的方案

    转移如果选就全涂否则枚举上一行非空的转移,前缀和可以做到O(n^2)

    7051. 2021.04.08【2021省赛】模拟 B 数据结构

    可以直接分块硬上,题解做法是按y分治,发现每次只用把R/B中权值最大的和其他的匹配的点对加进去即可,因为如果某个询问的两点都不是某段最大值,且两边都不能换(不同侧),则同时换后又同侧了

    然后矩形二维数点,桶排树状数组

    CF1503F. Balance the Cards

    最终的情况可以看作若干条曲线,每条曲线用1表示顺时针0表示逆时针(图见官方题解),则有三种操作:

    ①1S1->10revS11

    ②1S1->11revS01

    ③1S1+1T1->1ST1

    模拟即可,实现细节:

    在合并曲线时用双向链表维护最终序列,翻转是因为把前面的0/1去掉后方向反了,所以要把序列反过来,递归记一下链表的方向

    ①②操作新增的两个放的位置不同

    ③操作将S的最后一个和T的第一个合并,从链表中间插入(所以要维护方向)

    Codeforces Round #712 (Div. 1)

    A:把0变为)()()(,这样显然最优

    B:黑白染色,黑放1白放2,如果一种放完了剩下的放剩下两种,一定有解

    C:xjb判然后fst了,排序后如果从最小的开始则显然是(sum max(0,a_i-max(a_j+c_j))),如果不是也可以构造得到:找到从最小的开始跳的关键点,从1开始时如果1不是关键点就清掉前面的非关键点然后从最小的开始跳,否则跳完后面的回来跳前面的

    D:发现如果存在a,b使得ab同在[1,n]或[n+1,2n]则无解,因为此时一定会出现另一对在另一个区间的,这样就不交了

    把a排序,然后问题变为把一个序列f分成两个下降子序列,每个分在1/2组里有代价

    如果没有代价就直接维护两个端点贪心选,加上代价后把f按min(前)>max(后)分组,则每组内方案唯一

    证明:设当前两个端点为a,b(a<b),显然a=min(前),若当前匹配到x且x<a<b,则必用a接x,否则将会变为b'<min(前)=a<max(后),后面一定接不上

    E:显然的结论:最终的图不能同时存在从1行走蓝到n行,或从1列走黄到m列的路径,否则有格子会交

    如果满足其中一个画一下发现像早苗开海,中间存在一条分界线把两边的黄色凸块分开,且分解处无交,组合数算一下,都不满足就端点相交

    7046. 2021.04.05【2021省赛模拟】迷路深層(xor)

    假题2

    发现只需要把非树边产生的环考虑进去就可以凑出所有情况

    回滚莫队并查集线性基维护,时间两个log

    7045. 2021.04.05【2021省赛模拟】数学考试(sleep)

    假题1

    每个函数拆成-100~100的点顺序连边,中间连函数值相反数,约束就从u链的xv+D连向v链的xv

    时间至少是O(n^6)

    7044. 2021.04.05【2021省赛模拟】悄悄话(word)

    建AC自动机,每新加一个串就用路上点的fail链更新,线段树维护

    PE394 Eating pie

    一开始想硬点长度为1剩余为k,然后发现比较阴间

    [large f(x)=frac{2}{x}F(y)|_k^x-frac{2}{x^2}(yF(y)|_x^k-G(y)|_x^k)+1\ large f(x)=frac{2}{x}(F(x)-F(k))-frac{2}{x^2}(xF(x)-kF(k)-G(x)+G(k))+1\ large f(x)=frac{2}{x}(-F(k))-frac{2}{x^2}(-kF(k)-G(x)+G(k))+1\ large f(k)=frac{2}{k}(-F(k))+frac{2}{k^2}kF(k)+1=1\ large f(x)=frac{2}{x}(-F(k))-frac{2}{x^2}(-kF(k)-G(x)+G(k))+1\ ]

    其实直接用题目的E就可以了,大概推导如下

    [large E(x)=1+frac{2}{x}int_1^xE(y)dy-frac{2}{x^2}int_1^xyE(y)dy \ large x^2E(x)=x^2+2xint_1^xE(y)dy-2int_1^xyE(y)dy \ large 2xE(x)+x^2E'(x)=2x+2int_1^xE(y)dy+2xE(x)-2xE(x) \ large 2E(x)+2xE'(x)+x^2E''(x)+2xE'(x)=2+2E(x) \ large x^2E''(x)+4xE'(x)=2 \ large frac{1}{r1-r2}(x^{r1}int x^{-r1-1}f(x)dx-x^{r2}int x^{-r2-1}f(x)dx) \ large frac{1}{3}(x^{0}int x^{-1}f(x)dx-x^{-3}int x^{2}f(x)dx) \ large frac{1}{3}(2int x^{-1}dx-2x^{-3}int x^{2}dx) \ large frac{1}{3}(2(ln x+C_1)-2x^{-3}(frac{1}{3}(x^3+C_2))) \ large frac{2}{3}(ln x+C_1)-frac{2}{9}-frac{2}{9x^3}C_2 \ large C_1=frac{3}{2}, C_2=-1\ ans=large frac{2}{3}ln x+frac{7}{9}+frac{2}{9x^3} \ ]

    里面的积分是积分上界函数,$int_1^x f(y)dy (求导等于)f(x)$,导两次后得到二阶非齐次欧拉方程

    解法见https://wenku.baidu.com/view/b6477750ed3a87c24028915f804d2b160a4e864e.html

    两个单位根是-3,0(x^2E''+axE'+bE=f(x),a=1-r1-r2,b=r1r2),得到后代公式(large y=frac{1}{r1-r2}(x^{r1}int x^{-r1-1}f(x)dx-x^{r2}int x^{-r2-1}f(x)dx))

    注意两次积分有常数项,代入E(1),E(2)可得到C1=1.5,C2=-1

    6151. 【GDOI2019Day1模拟2019.4.28】星际穿越

    容斥+多项式求逆

    6150. 【GDOI2019Day1模拟2019.4.28】爱乐之城

    nlnn求出两个人的贡献S1S2,则ans=ΣΠS1(ai)S2(gcd(ai))

    类比n=Σφ(d),设S2(n)=ΣG(d),d|n,反演得到G,每次直接在约数处更新,每个位置乘上G求和,这样一组就会合起来贡献得到S2(gcd(ai))

    不要写vector

    6149. 【GDOI2019Day1模拟2019.4.28】盗梦空间

    建虚树分类讨论,在虚树点的子树就排序线段树,在边上就dij算出距离然后算一下,虚树边的点的儿子就找到分界点,上半部分线段树下半部分倍增预处理

    7006. 2021.03.11【2021省赛模拟】玩游戏(game)

    结论:当max(已出现)<min(未出现)时,当前的人会选择直接开,否则会换

    如果满足的话显然之后怎么换都是比max(已)要优,所以一定会开

    否则反证,若max(已)>min(未)且当前的人开了,后面的人根据归纳满足上面的策略

    一句话证明:如果当前的人的数字变大了,则前面一定存在比变大前更小的,这个人不断换到最后一定会换到更小的

    考虑对于一个排列a算答案,发现答案就是Σ[ai是后缀最小值],如果是的话后面怎么换都换不走,否则ai加进去后一定是当前的max(已开的是一段连续的+一个max),最后会被换走

    所以答案就是Σ1/i,(S_k(n)=frac{-ln(1-x)}{(1-x)^{k+1}}),求导推得(kS_k(n)+inom{n+k}{k}=(n+1)S_{k-1}(n+1)),递归求解,k=0时n大就用欧拉常数算

  • 相关阅读:
    outline resize none == div都有自己的使命和作用
    trigger triggerHandler
    很好的代码 没用了 真可惜
    人生要有一种追求 不管追不追求的到
    array_merge Vs +=
    print $base_path.$language->prefix;
    link image field ==== image link formatter
    在views php里面dpm() 打印在preview里
    manage field vertical-tab-group === vertical tab
    contextual filter equal what ?
  • 原文地址:https://www.cnblogs.com/gmh77/p/14604235.html
Copyright © 2020-2023  润新知