NOIP 模拟题 1 - 题面
2024 CCF 全国青少年信息学奥林匹克联赛
CCF NOIP 2024 模拟赛1
| 题目名称 | 水管系统 | 升级 | 文本查找 | 单身村庄 |
|---|---|---|---|---|
| 题目类型 | 传统型 | 传统型 | 传统型 | 传统型 |
| 测试点时限 | \(1.0\textbf{sec}\) | \(1.0\textbf{sec}\) | \(1.0\textbf{sec}\) | \(1.0\textbf{sec}\) |
| 内存限制 | \(512\textbf{M}\) | \(512\textbf{M}\) | \(512\textbf{M}\) | \(512\textbf{M}\) |
编译选项:-O2 -std=c++14 -static
T1. 水管系统
题目描述
白云的公司搭建了 \(n\) 栋建筑,这 \(n\) 栋建筑排列成了一个环。按照顺时针顺序,\(i\)的下一栋是\(i+1\),\(n\)的下一栋是\(1\)。
白云给每栋建筑都独立建立了排水管道,水流速度为 \(v_i\)。
现在,白云想把这 \(n\) 栋建筑的排水管道连通。为了施工方便,白云规定,每次只能选择两栋在环上相邻的建筑施工(也就是说,每次只能连通 \(i\) 到 \(i+1\),或者 \(n\) 到 \(1\))。
但是,现在遇到一个难题:在连通两个建筑之前必须保证两个建筑管道流速是一样的,否则会出危险。
现在,建筑公司给白云设计了这样一个方案:建筑公司每次可以把当前的某一个连通块的建筑的管道进行改造,让流速整体 \(+1\),收费 \(1\) 元。
白云想知道,他最少花多少钱可以把这 \(n\) 栋建筑连通呢?
输入格式
第一行一个整数 \(n\) 表示建筑的数量
接下来 \(n\) 行,每行一个整数表示顺时针第 \(i\) 栋建筑的初始管道流速。
输出格式
输出最少总花费。
样例 #1
样例输入 #1
4
2 3 4 1
样例输出 #1
3
样例 #2
其它样例见附件
提示
样例 1 解释
一共有 \(4\) 栋建筑,初始流速分别为 \(2,3,4,1\)。
第一步,把建筑 \(4\) 的流速增加 \(1\),花费 \(1\) 元。
这样,建筑 \(1\) 和建筑 \(4\) 相邻,并且流速相同,就可以进行连通。
第二步,把建筑 \(1\) 和建筑 \(4\) 的流速一起增加 \(1\),花费 \(1\) 元。
这样,建筑 \(1\) 和建筑 \(2\) 相邻,并且流速相同,就可以进行连通。
第三步,把建筑 \(1,2,4\) 的流速一起增加 \(1\),花费 \(1\) 元。
这样,建筑 \(2\) 和建筑 \(3\) 相邻,并且流速相同,就可以进行连通。
此时所有建筑全部连通,花费 \(3\) 元。
数据范围
对于 \(30\%\) 的数据,\(n \le 100\)。
对于 \(60\%\) 的数据,\(n \le 1000\)。
对于 \(100\%\) 的数据,\(1\le n \le 100000, 1 \le x_i \le 10^8\)。
T2. 升级
题目描述
白云在玩一个游戏。
在这个游戏中,有 \(n\) 种能量丸,第 \(i\) 种能量丸的价格是 \(p_i\),使用以后白云的等级可以提升 \(r_i\)。每种能量丸最多买一个。
现在,白云在游戏内通过打怪积攒了 \(S\) 元,它想购买一些能量丸来提升自己的等级。同时,白云发现现在游戏有一个活动:捆绑消费。活动的规则是,白云可以选择两种能量丸 \(a,b\),只要白云买了能量丸 \(a\),就可以以和能量丸 \(a\) 一样的价格购买能量丸 \(b\)。当然,这个操作只能进行一次,其它 \(n-2\) 种还是需要原价购买。
现在白云想知道,他如何买能量丸可以使得提升的等级最多呢?
输入格式
第一行两个整数 \(S,n\),表示白云的钱数和能量丸种类数。
接下来 \(n\) 行,每行两个数 \(p,r\) 表示一种能量丸的价格和提升等级。
输出格式
输出白云能提升的最大等级。
样例 #1
样例输入 #1
10 5
1 3
3 4
3 4
4 5
3 3
样例输出 #1
16
样例 #2
其它样例见附件
提示
样例一解释:
可以把前两种能量丸进行捆绑,这样,可以用 \(10\) 元买下前四种能量丸。
数据范围
对于 30% 的数据,\(S \le 2000, n \le 20\)
对于 60% 的数据,\(S \le 2000, n \le 100\)
对于 100% 的数据,\(1\le S,n \le 10000, 1 \le r_i \le 10^5, 1 \le p_i \le S\)
T3. 文本查找
题目描述
白云今天新学会了键盘上的两个快捷键,C-A 和 C-C,一个表示全选,一个表示复制。
现在,白云想利用它新学的快捷键来构造一个很长的文本。它的操作方法为:先用键盘在一个空文件中随便敲一个字符串 \(S_0\),接下来它会做 \(m\) 次操作,第 \(i\) 次操作它会选择一个分隔字母 \(x_i\),然后把第 \(i\) 次操作前的字符串利用 C-A 和 C-C 复制一遍,并用 \(x_i\) 隔开,从而得到第\(i\)次操作后的字符串。
举个例子,假设 \(S_0\) 为 \(\tt{aba}\),白云操作三次,三次的分隔符分别为 \(x_1=\tt c\),\(x_2=\tt a\),\(x_3=\tt c\),那么操作的过程就会如下:
- 第一次操作,\(S_1=S_0+x_1+S_0=\tt{abacaba}\)
- 第二次操作,\(S_2=S_1+x_2+S_1=\tt{abacabaaabacaba}\)
- 第三次操作,\(S_3=S_2+x_3+S_2=\tt{abacabaaabacabacabacabaaabacaba}\)
在 \(m\) 次操作结束以后,白云有 \(Q\) 个疑问,第 \(i\) 个疑问为:查找一个字符串 \(T_i\) 在 \(S_m\) 中作为子串出现了几次呢?
输入格式
第一行一个字符串 \(S_0\)。
第二行一个字符串 \(x_1x_2x_3\ldots x_m\),你可以通过字符串的长度得到 \(m\) 的值。
第三行一个正整数 \(Q\) 表示询问次数。
接下来 \(Q\) 行,每行一个字符串 \(T_i\) 表示询问 \(T_i\) 在 \(S_m\) 中出现了几次。
输出格式
输出 \(Q\) 行,每行一个整数表示出现次数,答案对 \(10^9+7\) 取模。
样例 #1
样例输入 #1
aba
cac
3
a
ca
aaa
样例输出 #1
18
5
2
样例 #2
见附件
数据范围
对于 20% 的数据:\(m \le 5, Q \le 10, |T_i| \le 10\)
对于另外 20% 的数据:\(m \le 20, Q = 1\)
对于另外 20% 的数据:所有询问\(|T_i| = 1\)
对于 100% 的数据:\(1\le |S_0| \le 10\),\(1\le m \le 10^5\),\(1\le Q \le 10^5\),\(|T_i| \le 10^5\),\(\sum |T_i| \le 3 \times 10^5\),字符串的字符均为小写字母
T4. 单身村庄
题目描述
白云的村庄里生活着 \(n\) 户居民,村庄的外号叫做单身村庄,顾名思义,每一户里都只住着一个人。这些居民构成了一棵树的结构。
白云作为村长,觉得大家平时一个人生活挺无聊,经常想组织一些桌游活动。每次,他会组织在某一户居民 \(x\) 的家里玩一款需要 \(y\) 名玩家的桌游,那么就需要邀请除了 \(x\) 以外其他 \(y-1\) 户居民来参与(白云自己喜欢当游戏裁判,不参与游戏)。白云收藏的所有桌游中,玩家数量最少为 \(2\),最多为 \(12\)。
同时,邀请的人是有限制的:如果居民 \(z\) 参与,并且居民 \(z\) 在前往 \(x\) 的家中的路上,会路过居民 \(t\),则 \(t\) 也必须要参加,否则容易引起居民之间的矛盾。
同时,最近村里正在进行道路检修,有时候一条边会被开启检修状态,这样这条边两侧的居民就无法通行,也无法同时参与桌游。
具体地,在最开始所有道路都是可以正常通行的,接下来,按照顺序一共有 \(Q\) 个事件,有一些事件是修改,表示某条道路开始检修或者检修结束,有一些事件是询问,白云想询问举行一场桌游,有多少种邀请居民的合法方案。
输入格式
第一行两个数 \(n,Q\),表示树的点数和事件数量。
接下来 \(n-1\) 行,每行两个数表示树的一条边。
接下来 \(Q\) 行,每行第一个数 \(op\in \{0,1\}\)
- 如果 \(op=0\),接下来两个数 \(a,b\),表示要修改一条道路 \((a,b)\)。如果这条道路之前可以通行,则改为检修状态;如果之前是检修状态,则改为可以通行。
- 如果 \(op=1\),接下来两个数 \(x,y\) 表示白云想组织在 \(x\) 的家中玩一款需要 \(y\) 名玩家的桌游,有多少种方案。
输出格式
对于每个 \(op=1\),输出一行一个整数表示方案数,答案对 \(10^9+7\) 取模。
样例 #1
样例输入 #1
3 3
1 2
2 3
1 2 2
0 2 3
1 2 2
样例输出 #1
2
1
样例 #2
其它样例见附件
提示
样例 1 解释
一开始道路都可以通行,2 号点邀请一个人可以是 1,3。
随着 2 到 3 的边开始检修,2 号点邀请一个人就只能邀请 1 了。
数据范围
对于 20% 的数据,\(n,Q \le 15\)
对于 40% 的数据,\(n,Q \le 300\)
对于另外 20% 的数据,树是一条链
对于 100% 的数据,\(1\le n,Q \le 10^5\)

浙公网安备 33010602011771号