08 2024 档案
题解:CF914C Travelling Salesman and Special Numbers
摘要:题意 定义 为 二进制下 的个数。 定义对 的一次操作: ,显然任意正整数经过若干次操作后会变为 。 给定 和
题解:CF915G Coprime Arrays
摘要:题意 我们称一个大小为 的数组 互质,当且仅当 。 给定 ,对于每个 ,你都需要确定这样的数组的个数——长度为 的互质数组 ,满足对
题解:CF915C Permute Digits
摘要:题意 给出两个正整数 。在十进制下重排 ,构造一个不超过 的最大数,不能有前导零。允许不去重排 。 分析 因为位数小于等于 19,考虑搜索。 开个桶维护 中每个数码的个数,按位搜索即可。 每一位贪心地从大到小枚举,显然这是最优的。 最劣复杂度
题解:CF916D Jamie and To-do List
摘要:题意 维护一个数据结构,支持以下几种操作: set ai xi:设置任务 的优先级为 ,如果该列表中没有出现则加入该任务。 remove a_i:删除该任务。 query a_i:求优先级比 小的任务个数,如果没有则输出 。 undo sum
题解:CF916B Jamie and Binary Sequence (changed after round)
摘要:题意 把一个数分解成恰好 个 次方的和,可以重复,要求保证最大的 要尽可能的小时, 的字典序尽可能大,输出序列 。 分析 首先我们借助二进制拆出一个满足 序列 ,满足
题解:CF235C Cyclical Quest
摘要:题意 给定一个主串 和 个询问串,求每个询问串的所有循环同构在主串中出现的次数总和。 分析 后缀自动机好题。 循环同构的过程可以看作从该串的头部删除一个字符,并在尾部加入一个字符。 在后缀自动机上,跳 parent 树的过程就相当于删除头部的若干个字符。 所以我们可以套路地把
题解:CF70D Professor's task
摘要:题意 实现以下两种操作: 往点集 中添加一个点 。 询问点 是否在点集 的凸包中。 分析 动态凸包板子。 建议先完成 P2521 [HAOI2011] 防线修建。 上题维护的是上半个凸包,本题维护上下两个。 将凸包中的点按 排
题解:P2521 [HAOI2011] 防线修建
摘要:题意 给定若干个点,实现下列操作: 删除一个点。 查询上凸包的周长。 分析 建议先完成【模板】二维凸包。 对于这个删除操作,我们没有好的方法去在线维护它。 考虑离线询问。 这样删除操作就变成了插入操作。 插入一个新点有如下两种情况: 新点在凸包内。 新点在凸包外。 我们回忆一下 Andrew 算法的
题解:SP1182 SORTBIT - Sorted bit squence
摘要:题意 将区间 的所有整数按照其二进制位表示的数中 的数量从小到大排序。如果 的数量相同,则按照数的大小排序。求序列中第 个数。 其中,负数使用补码来表示:一个负数的二进制数与其相反数的二进制数之和恰好等于 。 分析 考虑用
题解:P3266 [JLOI2015] 骗我呢
摘要:题意 有一个 的数组 ,满足: \(\forall i \in [1,n],\forall j\in[1,m),x_{i,j}<x_{i,j+1}
题解:P7475 「C.E.L.U-02」简易输入法
摘要:题意 给定词典 ,每次询问读入一个字符串 ,以及一个整数 对于这个字符串有以下几种情形: 设 且 为 的前缀的个数为 。 当 时,请输出按照以输出次数从大
题解:UVA1479 Graph and Queries
摘要:分析 先看删边操作。 由于并不保证是森林,所以我们没有好的方法来在线维护删边相关的操作。 所以,我们可以套路地把询问离线,然后倒着操作。 删边变成加边。 需要注意的是权值的修改,记录时要把当前权值和修改的权值反过来。 然后我们发现这个操作很经典,维护方式和 [HNOI2012] 永无乡 差不多。 可
题解:P4847 银河英雄传说V2
摘要:题意 给定 个长度为 的序列,第 个序列中有一个元素,值为 ,接下来有三种操作: M x y,表示把 所在的序列放到 所在的序列之后。如果 已经在同一个序列,则不进行操作。 D x,表示把 所在的序
题解:P7952 [✗✓OI R1] 天动万象
摘要:提供一种和第一篇题解不同的理解思路。 题目分析 看到操作 :拿 dfs 序水水就行了。 看到操作 :??? 特殊情况 我们考虑一下特殊情况下操作 怎么处理。 假如这棵树是一条链。 设从根到叶节点权值如下:(随便赋的) 节点编号 1 2 3 4 5 6 权值 1 2 3
题解:UVA11996 Jewel Magic
摘要:题意 给你一个 01 串,要求完成以下操作: 单点插入。 单点删除。 区间翻转。 查询两点开始的 LCP。 分析 先看查询操作,如何得到 LCP 的长度? 我们可以考虑二分长度 ,然后用哈希检验区间 是否等于区间 。 平衡树
题解:AT_abc354_g [ABC354G] Select Strings
摘要:题目分析 题意 给定 个字符串,要求从中选出若干个组成一个集合,且集合中每个字符串都互不包含。 求集合中字符串的权值的和的最大值。 分析 首先很容易想到用 KMP 判两个串是否存在包含关系。 考虑建图,将不能同时存在于一个集合中的串的节点相连。 然后发现只需求出这个图的最大权独立集就行了
题解:CF590E Birthday
摘要:题目分析 题意 给定 个字符串,要求从中选出若干个组成一个集合,且集合中每个字符串都互不包含。 求集合最大包含几个字符串。 分析 本题弱化版:[ABC354G] Select Strings 就是求一个最长反链,并求构造方案。 求构造方案还是比较有意思的。 建议先做 P4298 [CTS
题解:AT_joisc2017_f 鉄道旅行 (Railway Trip)
摘要:题意 鉄道旅行 (Railway Trip) 分析 非常神仙的倍增做法。 我们设 表示从 点出发,停靠 站后能抵达的最左位置。 同理设 表示从 点出发,停靠 站后能抵达的最右位置。 考虑如何更新这
题解:SP3109 STRLCP - Longest Common Prefix
摘要:三倍经验: UVA11996 Jewel Magic P4036 [JSOI2008] 火星人 题意 维护一个字符串 ,支持以下操作: :输出 \(R\ i\ cha
题解:AT_joisc2019_h ランプ (Lamps)
摘要:题意 走廊上有排成一列的 盏灯,给出了一个 串 表示其开关状态( 表示打开, 表示关闭)。现在想要把这 盏灯变成目标状态 。 你有三种操作: OFF 操作:选择一个区间,将区间内所有的灯关闭。 ON 操作:选择一个区间,
题解:CF1290E Cartesian Tree
摘要:题意 给定一个 的排列 。 对于一个整数 ,将排列中 的项构成的子序列建大根笛卡尔树。这棵笛卡尔树的所有节点的子树大小之和记为 。 , 。
P1708 [入门赛 #21] 星云 hard ver. 题解
摘要:解法 因为 ,所以可以对于每个 进行搜索。 定义 为长度为 ,各数位之和为 的数的个数。 暴搜处理 dp 数组。 void dfs(int n, int sum, int mx) { if(!n) return dp[
P9912 [COCI 2023/2024 #2] Zatopljenje 题解
摘要:解法 一组询问 先考虑一个简化版的情况,如果只有一组询问怎么处理。 那不直接打暴力 可以考虑一个常见的技巧:每个位置赋一个颜色 ,满足: 这样我们就把原来的序列变成了
P10223 [COCI 2023/2024 #3] Eurokod 题解
摘要:解法 模拟题意即可。 先按组长评出的顺序赋上得分。 然后将其他成员给出的评分进行排序,然后赋上相应的得分。 这一步可以使用 pair<int, int> 进行存储。 最后再按总得分为第一关键字,成员评分为第二关键字排序。 这里可以用自定义结构体存储。 按题意输出即可。 Code #include<b
P3191 [HNOI2007] 紧急疏散EVACUATE 题解
摘要:题目描述 P3191 HNOI2007 紧急疏散EVACUATE 题目解法 看到数据范围:网络流 看到求时间:二分或分层 再看到给出的数据:BFS 所以我选择网络流+分层+BFS 建图 首先每个空地 都有一个人,所以从源点 连一条流量为 的边到 \((i,
题解:CF37E Trial for Chief
摘要:题目分析 题意 给一张全白的图,每次可以将一个四联通块染黑或染白,求转化到目标最少染色次数。 分析 考虑倒着想,由目标染回原图。 易得倒着染回去和正着染的最少染色次数相同。 所以我们考虑从最后的图入手。 考虑从某一个点 开始染色。 尝试进行建图。 在同样的颜色间转移的代价是 \(
题解:CF173B Chamber of Secrets
摘要:题目分析 题意 题干很丑陋 于是自己转换了一下问题: 可以考虑成倒着跑,从 出发,方向向右,抵达 。 每次遇到 # 可以以 的代价更换方向。其余情况均只能以原方向前进。 求最小代价。 分析 考虑分层图最短路。 每一层只能沿一个方向移动,边权为
P6743 [BalticOI 2014 Day2] Senior Postmen 题解
摘要:题目描述 P6743 BalticOI 2014 Day2 Senior Postmen 题目解法 看到题目想到直接爆搜。 根据题意,只要找出所有互不相交的简单环即可。题目保证了合法性。 跑 dfs,每次到达一个点 就将其放入栈 中。如果栈 中已经有点 \
CF1746F Kazaee 题解
摘要:CF1746F Kazaee 题解 题目描述 CF1746F Kazaee 题目解法 看到题目能想到一个相当劣的树状数组做法:先离散化,然后对每个数开个树状数组,每次查询区间内每个数的个数。 这个做法相当劣,修改 ,查询 ,总的复杂度为 \(O
P8575 「DTOI-2」星之河 题解
摘要:P8575 「DTOI-2」星之河 题解 题目描述 P8575 「DTOI-2」星之河 题目解法 看题目就能感觉到是一道求偏序的题。所以我们先找偏序关系。 和 的关系题面已经给出,现在考虑子树关系。 自然而然地联想到 dfs 序。 先求出每个点的 dfs 序
CF1494B Berland Crossword 题解
摘要:CF1494B Berland Crossword 题解 题目描述 CF1494B Berland Crossword 题目解法 思路 不难发现,会导致行和列互相干扰的格子只有矩阵角上的四个格子。 共有 个格子,有 种情况。 可以暴力枚举所有情况。 每次只需要判断该
CF58D Calendar 题解
摘要:CF58D Calendar 题解 题目描述 CF58D Calendar 题目解法 暴力题。 我们发现输出的字符串中除了每一行最后一个串没有分割字符,其余的都有。 并且每一行只会有两个字符串。 我们可以在每个输入的字符串后面加上分割字符后再进行排序,这样可以保证字典序最小。 每次枚举一个字符串,找
CF237B Young Table 题解
摘要:CF237B Young Table 题解 题目描述 CF237B Young Table 题目解法 题目中要求满足以下条件: 对所有的 ,满足 对所有的 \(i,j (1\leq i
CF895B XK Segments 题解
摘要:CF895B XK Segments 题解 题目描述 CF895B XK Segments 题目解法 朴素想法 最简单的想法就是枚举二元组 的第一项 ,然后再枚举 ,找到一个满足条件的 ,然后更新答案。 很明显,该做法的时间复杂度为 \(O(n^
[AGC048A] atcoder < S 题解
摘要:题目 [AGC048A] atcoder < S 分析 观察目标字符串,发现对于 atcoder 这个字符串,第一位 a 是最小的字符,而第二位 t 是最大的字符。容易得到一个贪心思路。 找到第一个大于 a 的,然后和第一位交换。 找到第一个大于 t 的,然后和第二位交换。 考虑两种特殊情况。 本身
P9837 题解
摘要:奇怪的构造方法居然过了... 本构造方法暂无证明,只是提供一种乱搞做法。 对于奇数的情况 首先我们从样例入手(为 的情况): 1 2 3 4 2 5 3 5 1 4 5 4 3 1 2 然后我们对样例进行一点改造: 1 2 3 4 1 5 3 5 2 4 5 4 3 1 2 我们将这个数
[ARC023D] GCD区間 题解
摘要:[ARC023D] GCD区間 upd on 2024.1.26:修正了 ST 表的时间复杂度分析。 一道数据结构维护 的好题。 首先,大家应该都能想到一种大暴力:枚举左右端点 , 暴力计算 然后开个哈希表记录每个 出现了几次。
题解:P5680 [GZOI2017] 共享单车
摘要:题目分析 出题人是擅长隐藏题意的 建树 首先给你一张无向图,然后指定一个根节点 ,从根节点开始沿最短路到每一个节点。如果到某个节点有多条最短路径,选择上一个节点编号最短的。 考虑记录前驱的 Dijkstra。 namespace DJ { int dis[maxn], pre[maxn],