首页 > 其他分享 >2024.6.27

2024.6.27

时间:2024-10-23 20:44:27浏览次数:6  
标签:10 le log 2024.6 二进制 cdots 27 choose

2024.6.27

T1

题面

给定一个正整数序列 \(a_{1\sim n}\),以及一个正整数 \(P\),求有多少的三元组 \((i,j,k)\) 满足:

  • \(1\le i<j<k\le n\)

  • \(P=a_i\times 2^{\lfloor\log_2a_j\rfloor+\lfloor\log_2a_k\rfloor+2}+a_j\times 2^{\lfloor\log_2a_k\rfloor+1}+a_k\)

\(多测,1\le T\le 10^3,1\le n\le 10^5,\sum n\le 10^6,1\le a<2^{20},1\le P\le 2^{60}\)

题解

可以看出,第二个条件本质上是将几个 \(a\) 在二进制的情况下拼起来,可以 KMP 匹配+DP 统计答案,复杂度 \(\mathcal O(\log P\sum n)\)

方法

  • 答案角度考虑

    答案关心什么,就计算什么。

    当答案是在关心一个数二进制下的属性,比如按位与、或、异或运算、1的数量,等等,就应该将数放在二进制下考虑。

    以 \(a\) 为底的对数、以 \(a\) 为底数的指数,其实实在考虑 \(a\) 进制的内容

T2

题面

有一个设计失败的机器人,他走路的路线是固定的。

具体地,机器人脑内有一个长度为 \(n\) 的指令序列 \(\{c\},c_i\in\{\text{L},\text{R},\text{D},\text{U}\}\) 分别表示向左、右、下、上走一单位长度。

定义向右为 \(x\) 轴正方向,向上为 \(y\) 轴正方向,假设机器人从 \((0,0)\) 出发,则他会按照这个指令序列走出一条路径。

对于一条路径中的每个点 ,假设这是第 \(i\) 次到达该点,则分数为\(i((|x|+1)\operatorname{xor}(|y|+1))+i\)。一条路径的分数则为该路径上每个点的分数之和。
现在研究人员要删除机器人指令序列中的一个指令。假设删除的是第 \(k\) 个指令。请你对于每个 \(k\) ,求出该机器人按照新的指令序列,从 \((0,0)\) 出发走出的路径的分数。

题解

开始看到异或,想到可能要用在二进制下考虑,但是会发现与题目没有什么关系。

考虑删除一个指令后,终点最多只有 4 种可能。我们从 4 个可能的终点分别倒推出一条路径并维护答案。

在从小到大枚举 \(k\) 的过程中,不断删除路径中的点,更新为正确的点(从前到后走的店)。

时间复杂度 \(\mathcal O(n \log n)\)。期望得分 \(100\) 分。

方法

  • 删去操作,应该前后两个方向两头计算,最后合并答案

  • 可能状态数思想。去看一个操作,可能总共会带来多少种不同的情况

T3

题面

有一 \(k\) 个物品,其中第 \(i\) 个价值为 \(a_i\),从中可重且有序地选取 \(n\) 个,求使得价值之和等于 \(m\) 的方案数,对 \(2\) 取模。

\(多测,1\le T\le 10,1\le n\le 10^{18},0\le m\le 10^{18},1\le k\le 200,0\le a_i\le 10^5\)

题解

题目可以抽象为构造一个 \(b\) 序列,求

\[\sum_{\sum_{i=1}^kb_i=n,\sum_{i=1}^ka_ib_i=m}\dfrac{n!}{\prod_{i=1}^kb_i!}\mod 2 \]

注意到 \(2\) 取模非常特殊,可以以此入手,考虑答案。

右侧式子对答案产生贡献当且仅当 \(\frac{n!}{\prod_{i=1}^kb_i!}\equiv1\pmod 2\),因为

\[\frac{n!}{\prod_{i=1}^kb_i!}={n\choose b_1,b_2,\cdots,b_k}={n\choose b_1}{n-b_1\choose b_2}\cdots{n-b_1-b_2-\cdots-b_{k-1}\choose b_k} \]

所以其值为一当且仅当后面每一项都为一,根据卢卡斯定理

\[{n\choose b_1}\equiv{n/2\choose b_1/2}{n\bmod 2\choose b_1\bmod 2}\equiv\prod_{bit=0}^{60}{n[bit]\choose b_1[bit]}\pmod 2 \]

\(x[bit]\) 值 \(x\) 在二进制下第 \(bit\) 位。

所以在二进制下 \(b_1\subset n\),同理 \(b_2\subset n-b_1,\cdots, b_k\subset n-b_1-b_2-\cdots-b_{k-1}\)。

所以右面式子值为一,当且仅当:

  • \(\forall 1\le i\le k,b_i\&n=b_i\)

  • \(\forall 1\le i<j\le k,b_i\&b_j=0\)

于是问题转化为,对于 \(n\) 的二进制表示下所有 \(1\) 的位置 \(i\),选择 \(2^ia_1,2^ia_2,\cdots,2^ia_k\)
之一加入,求最终和为 \(m\) 的方案数。

考虑从低到高枚举每一位,记录和为 \(S\) 的方案数。对于当前的 \(i\),合法的 \(S\) 满足 \(S ≤2^{i+1}\max a\) 且 \(S\equiv m\pmod {2^i}\),所以只有 \(\mathcal O(a)\) 个。

但是如果记录 \(dp[i][j]\) 表示考虑前 \(i\) 位时,和为 \(j\) 时的方案,就会导致 \(j\) 非常大,空间根本开不下,根据上面的性质,我们可以设 \(f[i][o]=dp[i][o<<i|(m\&((1<<i)-1)]\),因为后 \(i\) 位与 \(m\) 相同,不用存,这样空间只需要开到 \(2a\) 级别,加上 bitset 优化
时间复杂度 \(O(\frac{ka \log n}{w}),w=64\)。

方法

  • 从小入手——观察数据范围最小的那个变量

  • 模 \(a^i\) 可以看作取 \(a\) 进制下前 \(i\) 位,不断进行除模可以看作在 \(a\) 进制下展开

    卢卡斯定理就是一种进制展开

  • 阶乘除法与组合数之间可以互换

  • 组合数可以用卢卡斯定理在模数很小的情况下可以用来推式子或直接求值

  • 利用数学性质,避免存储大量无用信息,节省空间。

T4

题面

给定一张 \(n\) 个点 \(m\) 条边的无向图。点的编号为 \(1\) 到 \(n\) ,编号为 \(i\) 的点的权值为 \(a_i\) 。边的编号为 \(1\) 到 \(m\),编号为 \(i\) 的边连接节点 \(u_i,v_i,|u_i,v_i|\in\{A,B,A+B\}\) 。请你求出这张图的最大带权独立集的权值。

\(3\le n\le 200,1\le m\le 600,1\le A,B<n,1\le 10^6,1\le u_i,v_i\le n\)

题解

方法

  • 将一维的数据二维排列

标签:10,le,log,2024.6,二进制,cdots,27,choose
From: https://www.cnblogs.com/lupengheyyds/p/18498320

相关文章

  • 2024.6.23
    2024.6.22T1题面给\(n\)个数,求他们的最小公倍数对\(10^9+7\)取模的结果。\(1\len\le10^3\)解法用\(\prodp^{\max}\)计算T2题面在\(n\timesn\)的地图上有若干\(1\timesk\(k>1)\)的长条,竖着的只能竖向移动,横着的只能横向移动,一号一定横着,长条不能越过,求......
  • 2024.6.25
    2024.6.25题目T2,3,4只想到了算法,却不知道具体该如何设计T1最后使用了没有证明的常数优化,导致错误T1题面给长为\(n\)的序列\(\{a\}\)和整数\(d\),你需要找到\(l,r\)使得\(l\ler\lel+d\),构造序列\(\{b\}\),其中\[b_i=\left\{\begin{aligned}l,&&a_i\lel\\a_i,&&......
  • 2024.6.20
    2024.6.20T1题面给定一个正整数\(a\),在区间\([l,r]\)中选择一个数\(b\)使得\(a\timesb\)为一个完全平方数,若不存在输出\(-1\)。共\(T\)组测试样例\(1\leT\le1000,1\lea\le10^6,1\lel\ler\le10^{12}\)解法\(\mathcalO(\sqrta)\)的去除\(a\)中的平方因......
  • 2024.6.18
    2024.6.18T1题面给定若干个自然数\(a_{1\simn}\)。你需要选出其中一些数,然后将你选出的数划分为若干个集合。你需要最大化每个集合mex的异或和,输出这个值。\(1\lea_i\len\le10^6\)解法找出所有的\(0\to1\to2\to\cdots\tox\)链,每一个链对应集合\(\{0,1,\cdots,......
  • 2024.6.17
    2024.6.17T1题面有一个\(n\)个节点的联通图给出一个\(n\timesn\)的矩阵,其中\(a_{i,j}\)表示节点\(i\)与节点\(j\)之间的最短路,求原图的边权之和的最小值,如果不合法,输出\(-1\)\(n\le300,1\lea\le10^9\)解法我们先利用\(floyd\)跑一下,如果存在\(a_{i,k}+a_{......
  • Chromium127编译指南 Windows篇 - 使用 GN 工具生成构建文件(六)
    前言在上一篇文章中,我们已经成功获取了Chromium的源代码并同步了相关的第三方依赖。本文将继续深入,指导您如何使用GN工具生成构建文件,为接下来的编译工作奠定基础。切换Chromium版本至127在开始正式构建之前,我们需要将版本切换至127,这里我们使用git的切出功能创建新分支......
  • JavaScript 第27章:构建工具与自动化
    在现代JavaScript开发中,构建工具、代码转换工具、代码质量和代码格式化工具对于提高开发效率、保持代码整洁以及确保代码质量有着至关重要的作用。下面将分别介绍Webpack、Babel、ESLint和Prettier的配置与使用,并给出一些示例。1.构建工具:Webpack配置与使用Webpack是一个......
  • 原创计算机毕业设计—69271 django重大公告卫生事件物资管理系统 (源码免费领)定制程序
    摘要随着信息技术的快速发展,计算机应用已经进入成千上万的家庭。随着物资数量的增加,物资库存管理也存在许多问题。物资数据的处理量正在迅速增加,原来的手工管理模式不适合这种形式。使用计算机可以完成数据收集、处理和分析,减少人力和物力的浪费。需要建立重大公告卫生事件......
  • Springboot+vue社区智慧医疗服务管理系统的设计与实现 毕业设计程序源码98275
    目 录摘要1绪论1.1研究背景1.2研究意义1.3论文结构与章节安排2 社区智慧医疗服务管理系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程2.2.3数据删除流程2.3系统功能分析2.3.1功能性分析2.4系统用例分析......
  • 20222427 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实践内容1.1本周知识总结深入学习关于缓冲区溢出的基础知识。学习了关于后门的一些基础知识。1.2回答问题(1)杀软是如何检测出恶意代码的?病毒特征码检测加密文件分析基于行为检测的主动防御病毒云查杀(2)免杀是做什么?免杀,即Anti-AntiVirus(简写VirusAV......