首页 > 其他分享 >2024.1.23 模拟赛

2024.1.23 模拟赛

时间:2024-04-05 21:24:07浏览次数:18  
标签:2024.1 task 匹配 子树内 删除 23 dp mathcal 模拟

郊游

首先需要快速找到当前适配度最大的一对小朋友。容易发现 \(a,b\) 的适配度即为 \(a,b\) 二进制下最长公共后缀的长度,于是先翻转所有数的二进制串并插入到 Trie 中。那么 \(a,b\) 的适配度即为 \(a,b\) 所代表叶子节点的 \(\rm LCA\) (最近公共祖先)深度。

若 Trie 中以 \(x\) 为根的子树中仍有大于 \(1\) 个点未匹配,那么不会选择一对 \(a,b\) 满足 \(a\) 在 \(x\) 子树内而 \(b\) 不在。即每个子树内最多留下一个数未被匹配。

于是设 \(dp_x\) 表示 \(x\) 子树内已匹配的匹配值异或和,\(a_x\) 表示 \(x\) 子树内未匹配的数(若不存在未匹配的数,\(a_x=-1\) )。转移时只有当 \(a_{ls}\not=-1\) 且 \(a_{rs}\not=-1\) 时那么可以将两个数匹配,其余情况均保留未匹配数。

task 1

暴力的删除每个数,然后做上述 \(dp\) 即可。时间复杂度 \(\mathcal O(n^2\log W)\)。其中 \(W=\max w_i\) 。

task 2

发现最终的 Trie 是一颗完全二叉树,所有的叶子将会直接与兄弟匹配,贡献 \(0\) 的匹配度。而删除 \(x\) 后会使得原本和 \(x\) 一组的数字单独被分为一组。时间复杂度 \(\mathcal O(n)\)。

task 3

给定条件就是从一棵完全二叉树中删去几个数。考虑类似 task2 的条件,每删除一个数 \(x\) 就会导致原本与 \(x\) 形成匹配的数变成未匹配数。那么最多删除 \(700\) 个数,即最多有 \(700\) 个未匹配数,按照 task 1 的方法做即可。

task 4

若我们删除的数字为 \(w\) ,那么只有满足子树内包含 \(w\) 的节点的 \(dp\) 和 \(a\) 会发生变动。我们只需要最开始预处理所有点的 \(dp\) 值,然后每次询问暴力更新这 \(\mathcal O(\log W)\) 个节点的值即可。时间复杂度 \(\mathcal O(n\log W)\)。

标签:2024.1,task,匹配,子树内,删除,23,dp,mathcal,模拟
From: https://www.cnblogs.com/xhqdmmz/p/18116189

相关文章

  • 2024.3.17 模拟赛
    A贸易题目保证输入的边\(u<v\),说明题目中的图是一个有向无环图\(DAG\),但是不一定连通。可以记录\(f[i]\)表示到达\(i\)之前能遇到的最小的价格,使用拓扑排序进行\(dp\)转移。对于每一个点\(i\),如果其价格为\(a[i]\),就可以用\(a[i]-f[i]\)更新答案,取最大值即......
  • P9902 『PG2』模拟最大流 题解
    首先最大流等于最小割,然后就能很容易地想到一个状压dp做法:记\(f_{i,s}\)表示使得前\(i\)个点中,最后\(k\)个点与点\(1\)的联通情况为\(s\)的最小代价。然后考虑下一个点是否联通直接转移即可,然后就做完了。时间复杂度\(\mathcalO(n2^k)\)。参考代码:#include<bits/s......
  • 2024.2.25 模拟赛
    A按题意直接模拟即可。也就是每次取出一些字符,放入字符串\(P\)中。注意实现时的时间复杂度,不要写成\(O(n^2)\)的。#include<bits/stdc++.h>usingnamespacestd;chars[1000010],t[1000010];inthd1=1,hd2=1,n,m,x,y;charans[2000010];intmain(){ scanf("%s",s+1);n......
  • [C++][C++11][智能指针]分析详解 + 代码模拟
    目录0.智能指针三要素:)1.为什么需要智能指针?2.内存泄漏1.什么是内存泄漏?内存泄漏的危害?2.内存泄漏分类(了解)3.如何检测内存泄漏4.如何避免内存泄漏3.RAII4.智能指针原理5.auto_ptr(失败设计)6.unique_ptr7.shared_ptr1.实现原理:通过引用计数的方式来实现多个shared_ptr......
  • 模拟赛总结
    23-24term19.17最可惜的是t4:把b放在a后面就形成了一个长为2*m的LIS。我想到了LIS但是一直觉得无法保证长度为m所以直接hack掉自己的想法。。(虽然LIS时间复杂度10^7理论是可以过的。)太可惜了。当然也可以搜索剪枝(你是傻子你不会dfs你别想了)T2:转移方程脑子炸了想了好久,然后还没......
  • 文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题
    一、如果栈操作包括MULTIPUSH操作,它将k个数据项压入栈中,那么栈操作的摊还代价的界还是O(1)吗?文心一言:在栈的基本操作中,我们通常考虑的是单个元素的压入(push)和弹出(pop)操作,这些操作的摊还代价通常是O(1)。摊还代价考虑的是一系列操作的平均代价,而不是单个操作的最坏......
  • Cisco ACI Simulator 6.0(5h) - ACI 模拟器
    CiscoACISimulator6.0(5h)-ACI模拟器ApplicationCentricInfrastructure(ACI)SimulatorSoftware请访问原文链接:https://sysin.org/blog/cisco-acisim-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgACISimulator介绍思科以应用为中心的基础设施(ACI......
  • lanqiao OJ 3513 岛屿个数(2023省赛)
    原题链接:3.岛屿个数-蓝桥云课(lanqiao.cn)感觉这个题出的真的特别好,考察了对bfs的使用,包括连通性的一系列判断,如果对bfs掌握的不熟练真的很难想出如何下手来做这道题。这里我们需要用海水来进行bfs,海水可以渗透,也就是说可以走8个方向,因为我们要从任意一个边界点出发,所以我......
  • P9870 [NOIP2023] 双序列拓展 题解
    题意:称某个序列\(B=\{b_1,b_2,\cdots,b_n\}\)是另一个序列\(A=\{a_1,a_2,\cdots,a_m\}\)的拓展当且仅当存在正整数序列\(L=\{l_1,l_2,\cdots,l_m\}\),将\(a_i\)替换为\(l_i\)个\(a_i\)后得到序列\(B\)。例如,\(\{1,3,3,3,2,2,2\}\)是\(\{1,3,3,2\}\)的拓展,......
  • Qt模拟面试(超硬核)
    1.请简要介绍一下你的Qt开发经验。建议:诚实地描述你的Qt经验,包括你使用过的Qt版本、开发过的项目类型、遇到的挑战以及如何解决它们。假如你没有开发经验,可以提供一些关于Qt开发的一般信息和常见的经验分享。Qt是一个跨平台的应用程序开发框架,它提供了丰富的工具......