首页 > 其他分享 >NOIP2024加赛5

NOIP2024加赛5

时间:2024-11-17 20:43:06浏览次数:1  
标签:个数 贡献 区间 加赛 考虑 代价 节点 NOIP2024

  • 暴力操作(opt)

    拜谢丁真

    首先题目有一个很明显的性质:我们肯定只会对前 \(\cfrac{n+1}{2}\) 个数进行操作使它变小。

    最后的答案很明显没看出来具有二分答案的性质,考虑怎么 check。实则就是要判断前 \(\cfrac{n+1}{2}\) 个数是否都能 \(\le mid\)。我们可以方便的找出 \(a_i\) 变成 \(\le mid\) 所需的除以的倍数,怎么统计代价。设 \(f_{i,j}\) 表示考虑了前 \(i\) 种操作,除以的倍数为 \(j\) 的代价,然后跑完全背包即可,转移为:

    \[f_{i,j}=\min(f_{i-1,j},f_{i,\frac{j}{i}}+c_i) \]

    最后只在找所需除以的倍数的时候需要考虑一些细节。

  • 异或连通(xor)

    拜谢 GGrun

    将询问的 \(x\) 离线下来从小到大排序,考虑每条边会对哪些询问有贡献。建一颗 \(x\) 的 01 trie 树,每次从小到大往里插入 \(x\)。怎么判断每条边会对哪些询问有贡献?

    如果 \(k\) 该位为 \(1\),另 \(c_i\) 该位为 \(c\),则在 trie 树上可以往 \(c\oplus 1\) 走,此时异或为 \(1\);也可以往 \(c\) 走,此时异或为 \(0\),由于题目要求 \(c_i\oplus x<k\),所以往 \(0\) 走的这颗子树下的所有 \(x\) 区间都是 \(c_i\) 能有贡献的询问。重复这个操作,我们能找到所有的 \(c_i\oplus x<k\) 的区间,由于 trie 树的树高不超过 \(\log k\),所以每个 \(c_i\) 能产生贡献的区间个数不超过 \(\log k\)。

    找到这些区间有什么用,考虑线段树分治。(虽然叫分治,但好像和分治没什么关系?)在线段树上每个点记录该区间有哪些 \(c_i\) 可以产生贡献,开一个 vector 即可。由于上面已经得知区间个数 \(\le n\log k\) 个,所以显然是开的下的。我们在 trie 树上找 \(c_i\) 能贡献的区间的时候就相当于区间加,直接 update 即可。

    查询的时候怎么办?首先,如果查询到线段树上的一个叶子节点 \(x\),则说明我们肯定把所有能对 \(x\) 有贡献的边都算进来了,(考虑从上往下递归,每经过一个区间,就加上该区间 vector 里的标记)此时直接得出答案即可。然后,我们会退出该叶子节点,退出一个节点的时候,我们应该把该节点的标记都清空,减掉在该节点增加的贡献。用可撤销并查集即可维护,考虑一条边把两个连通块连接到一起,则 \(ans\leftarrow ans+ siz_u\times siz_v\),退出该节点的时候要减掉这些贡献。

  • 诡异键盘(keyboard)

    拜谢 Qyun

    题目要求用 \(n\) 个子串(可以选任意多次)拼成一个母串,每次可以删 \(k\) 个数的最小操作次数。考虑 \(n^2\) 的 DP,设 \(f_i\) 表示母串匹配到了第 \(i\) 个数,转移为:\(f_i=f_j+w_{j+1,i}\),其中 \(w_{x,y}\) 为用子串凑出母串中区间 \((x,y)\) 的最小代价。

    怎么预处理出这个 \(w_{x,y}\) 数组?可以用一个 unordered_map 来存得到字符串 \((x,y)\) 所需的代价。我们发现添加一个子串肯定都是想留下它的一个前缀,而得到这个前缀的所需的代价即为:删去多余部分(长度设为 \(t\))所需的代价 \(+1\)。如果 \(t\) 的长度不为 \(k\) 的倍数,那我们肯定要想办法在后面添上其他的子串凑出另一个长度 \(t'\),使得 \(t+t'\equiv 0\pmod k\)。

    所以说我们还需处理出一个数组 \(g_i,i\in [1,k)\) 表示在模 \(k\) 意义下,凑出长度为 \(i\) 的字符串的所需代价。类似于“同余最短路”,可以用 dijkstra 转移。

    DP 复杂度为 \(O(|S|^2)\),求出 \(w\) 数组的复杂度为 \(O(\sum |S_i|)\),预处理 \(g_i\) 数组为 \(O(k\log k)\)。

  • 民主投票(election)

    拜谢 9G

    首先 \(O(n^2)\) 的暴力很显然,直接枚举每个 \(i\),check 它是否可以获胜即可。怎么 check?有一个总的限制就是 \(f_x<siz_i-1\)(除 \(i\) 节点以外),其中 \(f_x\) 为 \(x\) 获得的票数。对于每一个节点,我们贪心的考虑,它的儿子都把票投给它,如果满足限制则是合法的,否则就把多余的票上传到它的父亲节点。最终只需检验 \(f_0\) 是否等于 \(0\) 即可,在递归的时候可以不递归 \(i\) 的子树。

    正解其实是在这上面的进一步优化。考虑先二分出一个最小的 \(s\),满足全局的 \(f_x<s-1\)。对于 \(siz\ge s\) 的点,肯定是可以获胜的,对于 \(siz<s-1\) 的点,肯定是不能获胜的。对于 \(siz=s-1\) 的点,有可能获胜,因为该点不合法是因为某点的 \(f_x\ge s-2\),但其实对于 \(i\) 来说 \(f_i\) 可以等于 \(s-2\)。我们把 \(s-2\) 再带进去跑一遍,如果 \(f_0=1\) 的话,则说明该点能够获胜,否则不能获胜。(考虑可以从 \(i\) 节点到根的路径上撤回一票,因为 \(f_i\) 是可以等于 \(s-2\) 的)

p

标签:个数,贡献,区间,加赛,考虑,代价,节点,NOIP2024
From: https://www.cnblogs.com/zhagnxinyue/p/18551065

相关文章

  • NOIP2024 前集训:NOIP2024加赛 5
    前言music《浮光》看指尖拨响蝴蝶扇动一场离别我推开无声岁月续梦一页你我只是打个照面可曾有过誓约走进熟悉却陌生的思念啊……啊……你的眼眸装满了时间你的身后拥故事成篇此生如梦愿细数流年与你同写沧海桑田浮光掠影重山彩云间你的伏线......
  • 『模拟赛』NOIP2024加赛5
    Rank反向挂分大王A.暴力操作(opt)签,但是没有人签。都想到了二分和更新c值,但是c多多少少没更到最优。首先还是调和级数预处理,倒序取min。然后考虑到超过\(m\)的也有可能产生更小的代价,因此\(\mathcal{O(n)}\)枚举一遍找到最小的\(j\)使\(i\timesj\gtm\),全部赋......
  • NOIP2024加赛5
    喜欢每个包绑一个hack是吧。暴力操作(opt)容易发现答案具有单调性,考虑二分答案。还发现只需要处理\(1\sim\left\lceil\frac{n}{2}\right\rceil\)即可。发现如果\(c_{i}>c_{j}且i<j\),那么选\(j\)肯定更优。有\(\left\lfloor\frac{a}{bc}\right\rfloor=\left\lfloor\frac{\left\l......
  • NOIP2024加赛5
    NOIP2024加赛5题目来源:2023NOIPA层联测31\(T1\)HZTG5777.暴力操作(opt)\(40pts\)先将\(\{a\}\)升序排序。因为\(\left\lfloor\dfrac{\left\lfloor\frac{a}{b}\right\rfloor}{c}\right\rfloor=\left\lfloor\dfrac{a}{bc}\right\rfloor\),先钦定\(......
  • NOIP2024模拟赛#21 总结
    坐牢3h+。赛时开T1,发现好唐啊,10min切了。过了全部大样例。开T2,现在是8:10。?现在是8:27,我怎么把T2大样例全过了。是不是太水了。我只是胡了一个贪心啊。开T3,现在是8:30。草,T1加样例了,做法假了。先不管T1了,先去看T3。感觉保证每次操作后都会满足对于\(i......
  • NOIP2024 前集训:MX 炼石计划 NOIP 模拟赛 20
    前言今天不知道为啥去打MX了,bug不少啊,包括但不限于赛时能通过自己主页看自己题过没过,赛时可以进入“补题”的比赛交从而直接成IOI赛制,文件还有点问题?0+100+12+0,T1读假题:\(\ge×,>√\),喜提爆零,但是本来就不会正解,我去我表都打出来了不知道二分??!?!!?不打T4是错误的,乱搞能得的分......
  • 【考试题解】NOIP2024(欢乐)加赛3
    目录A.SakurakoandWater题目内容思路代码B.BinomialCoefficients,KindOf题目内容思路代码C.QED'sFavoritePermutation题目内容思路代码D.CardGame题目内容思路代码E.LongWaytobeNon-decreasing题目内容思路代码F.ManyGames题目内容思路代码A.SakurakoandW......
  • NOIP2024模拟赛27 | 选手只有 T4 AC
    又是高一rk7。这场大众分太高了。我以为有很多人过T4的。80(95)+80+45(55)+100,sy机子太慢了。T1:场上只想出来\(A^{1/4}\log^2A\)的单次做法,只有80。即枚举小的那个底数。结论:满足条件的数可以表示成\(a^2b^3\)。???这样直接枚举\(\min(a,b)\le4000\)的质因子就做......
  • NOIP2024 前集训:NOIP2024加赛 3(欢乐赛)
    前言再次考古,现在才写。这场叫欢乐赛,搬的CF,不知道OJ哪儿来的RMJ。就记得T3一直往数据结构上想浪费好多时间,结果发现是结论题\(O(n)\)可做。T1SakurakoandWater虽然我之前不知道主对角线是什么东西,但是看完题目自动把他过滤成左上角到右下角了(不知道当时怎么想的,好......
  • NOIP2024 前集训:多校A层冲刺NOIP2024模拟赛20
    前言考古了,现在才写。已经忘了赛时历程了,就记得T1打了个错误率高达\(\dfrac{1}{100000}\)的乱搞做法(前后各连\(\log\)个\(k\)大值)然后被卡常了,后三道都没交不记得为啥了。T1星际联邦std是\(O(m\logm)\)的菠萝算法,但是被众人疯狂爆标。正解是\(O(n)\)的,不考虑......