CF722F Cyclic Cipher 题解

news/2024/10/7 19:36:28/文章来源:https://www.cnblogs.com/FLY-lai/p/18450434

传送门

给定 \(n\) 个数列,第 \(i\) 个数列包含 \(k_i\) 个不超过 \(m\)互不相同的正整数(从 \(1\) 开始标号)。

每一秒将每个数列中的数左移一个位置(即将每个数的下标 \(-1\) , 下标 \(1\) 的数下标变为 \(k_i\)), 并记录由每个数列的第一个数组成的序列。

\(10^{100}\) 秒过后,对于所有的 \(1\leqslant x\leqslant m\) ,求 \(x\) 在记录下来的序列中出现的最长的连续的一段长度。

\(n,m\le 10^5,\sum k_i\le 2\times 10^5,k_i\le 40\)


发现数与数之间是独立的,因此单独考虑每个数 \(x\)。称两个序列是相容的,当且仅当它们能使 \(x\) 在某个位置重合。
同时有一个小观察,如果 \(x\) 能在某个位置重合,那把序列都左移一位还是重合的,因此可以默认 \(x\) 在开头位置重合。

考虑简单情况,如果只有两个序列 \(a,b\)\(x\) 分别在 \(p_a,p_b\) 位置,怎么判断相容?

容易发现这是裴蜀定理的形式,即要存在 \(x,y\) 使得 \(ax+by=|p_a-p_b|\)。而根据裴蜀定理,有解 \(\iff\) \(gcd(a,b)\mid |p_a-p_b|\)
\(gcd\) 显然是好求的,而由于每个序列内数互不相同,所以 \(p_a,p_b\) 是固定的。因此能简单判断两个序列是否相容。

然后考虑怎么判断连续一段序列是否相容?
结论:当且仅当两两相容。

证明:若一段序列都相容,显然在它们都相容的时刻可以达到两两相容。下面从两两相容证明都相容。

根据序列的个数 \(n\) 进行数学归纳法。

  1. \(n=2\) 显然成立。

  2. 假设 \(n=k\) 时成立,则对于任意 \(n=k+1\),设 \(k+1\) 个序列长度为 \(t_1\sim t_k,p\)。由归纳法知 \(t_1\sim t_k\) 两两相容。

    假设在 \(t_1\sim t_k\)\(x\) 某次在 \(1\) 重合时,\(p\) 中的 \(x\) 还有 \(r\) 次才能转到 \(1\) 号位(位于 \(r+1\))。

    由于两两相容,所以 \(gcd(t_i,p)\mid r\),对 \(i=1\sim k\) 均成立。设 \(q\) 为某质数,\(q\)\(p\) 中幂次为 \(q_p\),在 \(r\) 中幂次为 \(q_r\),在所有 \(t_i\) 中的幂次取 \(\max\)\(q_t\)。因为 \(gcd(t_i,p)\mid r\),所以 \(\min(q_p,q_t)\le q_r\),所以 \(gcd(p,lcm\{t_i\})\mid r\),所以存在 \(x,y\) 使得 \(px+lcm\{t_i\}y=r\)\(x,y\),转化一下有 \(x\cdot p+r=y\cdot lcm\{t_i\}\)。这说明在所有序列左移 \(r+x\cdot p\) 之后,所有 \(x\) 都会在 \(1\) 号位。

证毕。


如何利用这个结论?显然有单调性,考虑双指针,对于每个 \(l\) 求出最大的 \(r\) 使 \([l,r]\) 相容。

因为 \(k_i\) 只有 \(40\) 种取值,相同 \(k_i\) 的序列相容当且仅当它们 \(x\) 的位置相同,因此可以记录 \(pos_i\) 表示当前区间内长度为 \(i\) 的序列的 \(x\) 在哪个位置。这样在 \(r\) 右移的时候,最多只需要判断 \(40\) 次裴蜀定理,就能确定是否相容了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809558.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器的渲染原理

浏览器渲染原理 五个渲染流程Parse 阶段:解析 HTMLStyle 阶段:样式计算三个阶段:收集,划分和索引所有样式表中存在的样式规则 访问每个元素并找到适用于该元素的所有规则,CSS 引擎遍历 DOM 节点,进行选择器匹配,并且匹配的节点执行样式设置 结合层叠规则和其他信息为节点…

CSP2024 前集训:多校A层冲刺NOIP2024模拟赛03

前言T1 没想到正难则反,脑瘫了没敢用 bitset(复杂度擦边但卡常能过),T2 空间开大了挂了 \(100pts\),\(T3\) 是原。 T1 五彩斑斓部分分 \(20pts\):\(O(n^4)\) 暴力。部分分 \(20+?pts\):进行一些优化,极限数据下仍是 \(O(n^4)\)。部分分 \(60\sim 100pts\):bitset 优化…

在C#中使用适配器Adapter模式和扩展方法解决面向的对象设计问题

之前有阵子在业余时间拓展自己的一个游戏框架,结果在实现的过程中发现一个设计问题。这个游戏框架基于MonoGame实现,在MonoGame中,所有的材质渲染(Texture Rendering)都是通过SpriteBatch类来完成的。举个例子,假如希望在屏幕的某个地方显示一个图片材质(imageTexture)…

React Fiber 原理

React Fiber 在 React 16 之前的版本对比更新 VirtualDOM 的过程是采用 Stack 架构实现的,也就是循环加递归,这种方式的问题是一旦任务开始进行就无法被中断。 如果应用中的组件数量庞大, Virtual DOM 的层级比较深,主线程被长期占用,知道整颗 Virtual DOM 树比对更新完成…

视野修炼-技术周刊第104期 | 下一代 JavaScript 工具链

① 🐙 尤大创办公司 VoidZero ② Tauri 2.0 稳定版发布 ③ Vite 时髦的新主页 ④ qrframe - 漂亮二维码生成 ⑤ HTTP QUERY 方法提案 ⑥ TinyJS - 轻量级的创建DOM元素 ⑦ 9月 Web 平台的新功能 ⑧ ESLint 现在正式支持 Linting JSON 和 Markdown欢迎来到第 104 期的【视野修…

雅礼国庆集训 day1 T2 折射

题面 题面下载 算法 转化题意 说白了就是给了你一堆点,让你数这种折线有多少个 (严格向下走,并且横坐标之间的差越来越小)看着像一种在 y 轴方向排序的 dp 但是由于是折线, 所以需要加一维来判断转向 dp 设计 状态设计 \(dp_{i, 0/1}\) 表示第 i 个点, 是向左下还是右上 状态…

React 中的 diff 算法

React diff为什么使用虚拟 DOM ? 浏览器在处理 DOM 的时候会很慢,处理 JavaScript 会很快,页面复杂的时候,频繁操作 DOM 会有很大的性能开销(每次数据变化都会引起整个 DOM 树的重绘和重排)。 为了避免频繁操作 DOM,React 会维护两个虚拟 DOM,如果有数据更新,会借此计…

20222315 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 1.掌握反汇编与十六进制编程器 2.能正确修改机器指令改变程序执行流程 3.能正确构造payload进行bof攻击 2.实验过程 1.直接修改程序机器指令,改变程序执行流程 将pwn1文件下载至kali中并将pwn1文件改名为pwn20222315,并将其内容复制到pwn2反汇编文件objdump -d…

多校A层冲刺NOIP2024模拟赛03

多校A层冲刺NOIP2024模拟赛03\(T1\) A. 五彩斑斓(colorful) \(90/100pts\)部分分\(20pts\) :枚举左上 \((k,h)\) 、右下端点 \((i,j)\) ,时间复杂度为 \(O(n^{2}m^{2})\) 。 \(90/100pts\) :当 \(a_{i,j} \ne a_{k,j}\) 时任意的 \(h \in [1,j]\) 都符合题意、不妨钦定 \(…

Word中 Endnote 引用标蓝色

1. 打开word中的endnote加载项。如图所示,勾选这两个设置。 确认后会自动变为超链接,显示蓝色以及下划线。 2. 在样式设置中,将超链接的下划线取消。之后就会只显示蓝色引用。 结果显示:

中国大学生程序设计竞赛(秦皇岛)正式赛东北大学秦皇岛分校(SMU Autumn 2024 Team Round 1)

中国大学生程序设计竞赛(秦皇岛)正式赛东北大学秦皇岛分校(SMU Autumn 2024 Team Round 1) Problem A. 贵校是构造王国吗 I 思路 官方题解很清晰明了。代码 #include <bits/stdc++.h> using namespace std; #define int long long #define endl \n #define PII pair&…