| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Codeforces Global Round 17题解A-D -> 正文阅读 |
|
[数据结构与算法]Codeforces Global Round 17题解A-D |
Codeforces Global Round 17A. Anti Light’s Cell Guessing分析:考虑0的情况就行了。 代码:
B. Kalindrome Array分析:不妨记字符串为s, 长度为m. 分以下情况讨论:
为什么是将其类字符全部删掉呢, 这好像和题干有点不太一样. 实际上, 即便不删掉其类字符也是匹配的本身, 和全删掉的情况下判是否是回文串是等价的. 代码:
C. Keshi Is Throwing a Party分析:一开始我考虑了一会反悔贪心, 发现不可做. 然后发现是*** 当我们确定我们要check的人数的时候, 直接贪心地找. 不懂的话看代码. 时间复杂度 O ( n log ? n ) O(n\log n) O(nlogn) 代码:
D. Not Quite Lee分析:考虑一个有 k k k个元素的数组 c c c,如何去判断是否为good。 我们发现对于每个 c i ∈ c c_i\in c ci?∈c, 其整数的连续序列的和为 c i ( c i ? 1 ) 2 + x i c i \frac{c_i(c_i-1)}{2}+x_ic_i 2ci?(ci??1)?+xi?ci?, 其中 x i x_i xi?为任意整数。 于是我们可以将一个数组c是否good等价地转换为这个式子: 记 s = ∑ i = 1 k c i ( c i ? 1 ) 2 , g = g c d ( c 1 , c 2 , . . . , c k ) s = \sum_{i=1}^k \frac{c_i(c_i-1)}{2}, g = gcd(c_1, c_2, ... , c_k) s=∑i=1k?2ci?(ci??1)?,g=gcd(c1?,c2?,...,ck?) 于是判定一个数组c是否good的问题转换成了: g是否可以整除s. 考虑对于数组c存在奇数的时候:
于是接下来我们只需要考虑数组c只存在偶数的情况. 观察到这么一个事实: 如果奇数y整除偶数x, 那么 y ∣ x 2 y|\frac{x}{2} y∣2x?; 如果偶数y整除偶数x, 那么 y 2 ∣ x 2 \frac{y}{2}|\frac{x}{2} 2y?∣2x? 考虑到枚举g是时间不可行的, 因此我们尝试建立一个1-1映射来减少我们需要枚举的约数. 对于 g ∣ s g|s g∣s, 显然s是偶数, g也是偶数(奇数已经算完了), 那么 g 2 l ∣ s 2 l \frac{g}{2^l}|\frac{s}{2^l} 2lg?∣2ls?. 其中$2^l | g \space\ $ 且 ? 2 l + 1 ∣? g \space2^{l+1} \not | g ?2l+1?∣g, 也就是说 2 l 2^l 2l是g的最大的2的整次幂因子.
于是我们不妨把g映射到 2 l 2^l 2l上, 这显然是一个1-1映射. 具体操作如下: 对于数组c中所有可以被 2 l 2^l 2l整除但不能被$ 2^{l+1} $整除的元素, 放入集合A. 对于数组c中所有可以被 2 l + 1 2^{l+1} 2l+1整除的元素, 放入集合B. 显然对于任意包含集合A中的偶数个元素的任意组合, 其g的映射都是 2 l 2^l 2l. 为什么包含集合A中的奇数个元素不是呢? 观察单个元素, 不妨记为 e = k 2 l e = k2^l e=k2l, 其中k为奇数. 那么 e ( e ? 1 ) 2 = k 2 l ? 1 ( k 2 l ? 1 ) \frac{e(e-1)}{2} = k2^{l-1}(k2^l-1) 2e(e?1)?=k2l?1(k2l?1), 这是一个最大的2的整次幂因子为 2 l ? 1 2^{l-1} 2l?1的数. 那显然s 的最大的2的整次幂因子也为 2 l ? 1 2^{l-1} 2l?1. 但如果是偶数个集合A元素就可以解决这个问题. 设数组c中所有可以被 2 l 2^l 2l整除但不能被$ 2^{l+1} $整除的元素的个数为 a a a; 数组c中所有可以被 2 l + 1 2^{l+1} 2l+1整除的元素的个数为 b b b. 那么 2 l 2^l 2l的答案为 2 a ? 1 ? 2 b 2^{a-1}\cdot 2^b 2a?1?2b 枚举 l l l统计答案即可. 总的时间复杂度是 O ( n log ? ( 1 e 9 ) ) O(n\log(1e9)) O(nlog(1e9)) 代码:
E. AmShZ and G.O.A.T.赶作业, 有空再补 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 15:24:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |