T1 约数和

标准解法

\(n = a_1^{b_1} \times a_2^{b_2} \dots a_k^{b_k}\)

那么根据算术基本定理的推广,约数个数和约数和都是可以快速计算得到

约数和 sum

\(sum = (a_1^0 + a_1^2 + ...+ a_1^{b_1}) \times (a_2^0 + a_2^2 + ...+ a_2^{b_2}) \times ...\)

然后用等比数列求和把他们算出来即可

\((a_1^0 + a_1^2 + ...+ a_1^{b_1}) = \frac{a_1^{b_1 + 1} - 1}{a_1 - 1}\)

T2 文件查找

题意

有 \(n\) 个字符串 \(S_i\),全部由小写字母组成。

另有 \(m\) 个字符串 \(T_j\),除小写字母外,每个字符串中有且仅有一个 \(*\) 字符。

其中 \(*\) 字符能够匹配任意字符串(含空串)。

对每个字符串 \(T_j\),求有多少个字符串 \(S_i\) 能被匹配。

标准解法

警告:本题标准解法较为复杂,而前 90% 部分的解法更加简单易懂。

步骤 1

将所有 \(S\) 串正、反建出两棵「字典树」 \(\text{Trie}\)、\(\text{Trie}'\),将同一 \(S\) 的结束位置 \(end_S\)、\(end_S'\) 关联

用 \(T\) 串 \(*\) 前的子串在 \(\text{Trie}\) 上匹配;\(*\) 后的子串的反串在 \(\text{Trie}'\) 上匹配。

若任何一匹配失败,则 \(T\) 不能与任何 \(S\) 匹配。

若均成功匹配,将在 \(\text{Trie}\)、\(\text{Trie}'\) 上得到的匹配结束位置分别记为 \(pos\)、\(pos'\)。

原问题转化为:求 \(\text{Trie}\) 中 \(pos\) 的子树中所有点的关联点在 \(\text{Trie}'\) 中 \(pos'\) 的子树中有多少个。

此问题能使用「DFS 序」解决。

步骤 2

\(\text{Trie}'\) 中 \(pos'\) 的子树在 \(\text{Trie}'\) 的 DFS 序中对应的区间为 \(\left[{dfn}_{pos'},{dfn}_{pos'}+{siz}_{pos'}\right)\)。

其中 \(dfn_{x}\) 表示 \(x\) 被 DFS 到的次序,\(siz_{x}\) 表示 \(x\) 子树的大小(节点数),这个序列使用「树状数组」维护。

当在 \(\text{Trie}\) 中 DFS 到 \(end_S\) 时,在 \(end_S'\) 对应的位置,即树状数组的 \({dfn}_{end_S'}\) 处 \(+1\)。

在 DFS 到 \(pos\) 时,首先(在包括上一段操作的所有操作之前)统计区间 \(\left[{dfn}_{pos'},{dfn}_{pos'}+{siz}_{pos'}\right)\) 的和,这部分是由不在 \(pos\) 子树中的 \(end_S\) 产生的,应在答案中减去。

之后递归 DFS \(pos\) 的子树,当 \(pos\) 的子树全部 DFS 完毕后,再次统计区间 \(\left[{dfn}_{pos'},{dfn}_{pos'}+{siz}_{pos'}\right)\) 的和,此次统计与第一次统计的差值就是 \(T\) 能够匹配的 \(S\) 串数量。

具体实现时,可以将询问用「链表」链接在对应的 \(pos\) 上。

时空复杂度

记 \(|S|=\sum length(s_i)\),\(|T|=\sum length(T_j)\)

时间复杂度:\(\mathcal{O}\left(|S|+|T|+m\log{|S|}\right)\)

空间复杂度:\(\mathcal{O}\left(|S|\right)\),常数约为 \(60\)

标准程序

代码长度:2460 详见 std

特殊性质与部分分

前 90%

「\(*\) 只出现在首或尾」,建出两棵字典树后求子树和即可。

其他部分分

出题人为各种其他奇奇怪怪的暴力提供了充足的数据梯度。

T3 吃糖

这道题的题意验题人视角也觉得比较难以理解,理解题意需要比较久的时间。

理解题意之后,判断完无解之后,发现这其实是一个有向图,每条边的转移是有概率的,问期望从起点多少步到达终止节点(终止节点可以有多个)。

用\(dp_i\)表示从\(i\)出发,期望需要多少步能够到达终止节点,那么:

\(dp_i=1+\sum_j(dp_j\times P_{i,j})\),\(j\)表示的是从状态\(i\)可以到达状态\(j\),\(P_{i,j}\)是状态\(i\)转移到状态\(j\)的概率。

直接对这个方程组做高斯消元,复杂度是炸裂的\(O((2^{11})^3≈8.5\times 10^9\)。

尽管我们可以在高斯消元的时候做一些常数优化(实际上最快的一次提交刚好是\(0.9\)s多一点),但还是难以通过。

考虑到这个转移图是一个很特殊的图,有着严格的层次:二进制下有\(k\)个\(1\)的状态,只会转移到二进制下有\(k\)或者\(k+1\)个\(1\)的状态,所以我们可以按二进制下的\(1\)从大到小,依次来做高斯消元,这样每一层的节点数只有\(2^k\)这么多,时间复杂度降为\(\sum_{i=0}^{n}(C_n^i)^3≈2\times 10^8\),实际上在消元的过程中我们可以只把第一行的其他位置消成\(0\),所以并不会达到上界。

T4 区间

显然 \(f(l,r)\) 等于 \([l,r]\) 中的数值种数。

\(a_i,l,r\) 随机的部分就是出现超过一次的数很少,答案与询问区间的差很小,在实际数据中两者的差 \(\le5\)。

考虑每次在序列尾部加入元素,求出加入每个元素后最短的子区间满足在整个序列中出现的数都在这个区间中出现过。

对于这个问题我们可以维护一个指针 \(p\),表示从 \(p\) 开始的后缀满足条件。添加元素 \(x\) 时,若 \(x\ne a_p\),则不对 \(p\) 做任何操作;否则,将 \(p\) 赋值为最小的 \(i\) 满足不存在 \(j>i\) 且 \(a_i=a_j\)。

容易证明这样维护总是正确的。

考虑原问题,令 \(pre_i\) 表示 \(a_i\) 上一次出现的位置,若不存在,则为 \(0\);\(nxt_i\) 表示 \(a_i\) 下一次出现的位置,若不存在,则为 \(n+1\)。

因为没有强制在线,所以离线。

枚举右端点 \(r\),对于每个 \(l\le r\),维护最大的 \(p_l\) 满足 \(f(p_l,r)=f(l,r)\)。

沿用在一个序列末尾添加元素的维护方式,每次将 \(r\) 右移时,若 \(pre_r\ne 0\),找出所有的 \(i\) 满足 \(p_i=pre_r\),将 \(p_i\) 赋值为最小的 \(j\) 满足 \(nxt_j>r\)。

由操作过程可得,\(p_i\) 单调不降。

可以用四元组 \((l,r,x,y)\) 表示右端点为 \(y\) 时,将 \(p_i(i\in [l,r])\) 赋值为 \(x\)。

我们对每组询问 \([u,w]\),可以用三元组 \((u,v,w)\) 描述,\(v\) 为最小的满足 \(f(l,v)=f(l,r)\) 的值。

容易发现,答案为 \(\min(v-(\min\limits_{u\le i\le v,nxt_i>v}i)+1,\min\limits_{l\le u\le r,v \le y \le w} (y-x+1))\)。

前一部分是平凡的,后一部分可以枚举 \(y\),操作转化为单点插入、单点求值、区间取 \(\min\)。

可以预处理出所有的 \(u\) 并离散化,使用线段树维护。

若 \(u\) 相同则无法正确维护,离散化时需强制两两不同。

设 \(n,m\) 同阶,时间复杂度 \(O(n\log n)\),空间复杂度 \(O(n)\)。

2023 年 CCF 春季测试赛模拟赛 - 2 题解的更多相关文章

  1. PAT团体程序设计天梯赛 - 模拟赛

    由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 ...

  2. 4.28 省选模拟赛模拟赛 最佳农场 二维卷积 NTT

    第一次遇到二维卷积 不太清楚是怎么做的. 40分暴力比对即可. 对于行为或者列为1时 容易想到NTT做快速匹配.然后找答案即可. 考虑这是一个二维的比对过程. 设\(f_{i,j}\)表示以i,j为右 ...

  3. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛. A.Easy Equation (前缀和/差分)

    题意:RT,给你四个数\(a,b,c,d\),求\(x+y+z=k\)的方案数. 题解:我们可以先枚举\(x\)的值,然后\(x+y\)能取到的范围一定是\([x,x+b]\),也就是说这个区间内每个 ...

  4. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

  5. 『2019/4/8 TGDay1模拟赛 反思与总结』

    2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...

  6. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  7. 体育成绩统计——20180801模拟赛T3

    体育成绩统计 / Score 题目描述 正所谓“无体育,不清华”.为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心.然而每到学期期末时, ...

  8. NOIP前模拟赛总结

    NOIP前模拟赛总结 from 2018.10.7 to ??? Date Name Score(Rank) Problems 2018.10.7 McfXH AK Contest 42(?) 期望得 ...

  9. QHDYZ模拟赛20191012

    今天信息处老师(并不是教练,基本等于机房看门大爷) (好吧老师其实很犇,软件什么的厉害的一批,只是不能带oi--) 跟我说:"xxj,过两天月考完了,可以在初赛前再整一次模拟赛,一天,三道题 ...

  10. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

随机推荐

  1. 第三篇:前端基础之JavaScript

    前端基础之JavaScript   JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaS ...

  2. jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析

    jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析 在日常开发中存在着调度延时任务.定时任务的需求,而jdk中提供了两种基于内存的任务调度工具,即相对早期的java ...

  3. python 水仙花数、菱形、99乘法表、直角三角形

    空心菱形 i = 1 while i <= 3: # 控制行数 j = 1 k = 1 while j <= 3-i: # 控制空格数量 print(" ", end= ...

  4. JavaScript:操作符:算术运算符(加减乘除模幂)及其隐式转换数据类型

    加法+ 减法- 乘法* 除法/ 模运算% 幂运算**,即a ** b求的是a的b次方 执行上述运算时,当两个操作数有非数字时,JS会隐式转换为数字,再进行运算: 一些特殊的非数字,会进行如下转换: t ...

  5. Linux基础第五章 进程控制

    5.2 fork fork函数实现进程复制,类似于动物界的单性繁殖,fork函数直接创建一个子进程.这是Linux创建进程最常用的方法.在这一小节中,子进程概念指fork产生的进程,父进程指主动调用f ...

  6. .Net 7 团队把国内的龙芯确实当做一等公民和弃用的项目

    楔子: 国内龙芯据说是用的自己的指令集,在研究ILC的时候,发现了龙芯在微软那边确实是一等公民的存在. 龙芯官网 龙芯平台.NET,是龙芯公司基于开源社区.NET独立研发适配的龙芯版本,我们会长期进行 ...

  7. Netty-架构设计及入门程序-3

    一.原生 NIO 存在的问题 1.NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector.ServerSocketChannel.SocketChannel.ByteBuffer等. ...

  8. [WPF]使用Fody提高效率

    下载安装及使用 代码实例 public class Person:INotifyPropertyChanged { public event PropertyChangedEventHandler P ...

  9. 期望与概率 dp

    期望与概率 dp \(\text{By DaiRuiChen007}\) I. [洛谷4316] - 绿豆蛙的归宿 \(\text{Link}\) 思路分析 DAG 上做期望 dp,可以爆搜,也可以拓 ...

  10. ArcGIS实现打点、线路图、色块、自定义弹窗

    闲聊: 马上就要过年了,不知道大家过年都放几天假,小颖公司就只放8天假,就这还有一天是集体调休扣年假,就很··············还不如不放,不过庆幸最近这两周项目也做完了也没啥事,不然就静不下心 ...