2025 超新星战队 B 队暑假集训模拟赛

符号与约定

and :按位与

or :按位或

xor :按位异或

| :整除

C_n^m :组合数

d(n) :n 的正因数个数

Day1

T1 

题意:设 f(l,r) = f(l',r) + 1,其中 l' 是满足 a_{l'} > a_l 的最小正整数,若 l' > r,则f(l,r) = 0。求\sum_{l = 1}^n\sum_{r = l}^n f(l,r)


看了30min,感觉有一点像倍增,写了10min顺利通过,得分:100


T2

题意:称数组 T 能够碰瓷数组 S 当且仅当能通过操作任意次以下操作,使数组 T 变换为 S

  • 选择下标 1 \leq i \leq |T| 和一个整数 x(x \neq T_i),然后在 T_i 后插入 x

求数组 b 能碰瓷数组 a 中多少个子数组


刚开始想到的想法如下:

对于数组 a 中 b 的子序列,设 c_i 为 b_i 在 a 中对应的下标,若任意 i(1 \leq i < |b|) 都满足 a_{c_i} 到 a_{c_{i + 1}} 之间没有连续相同的数,则可以碰瓷。

感觉很像dp,写了发现不对,手玩大样例,发现判断可以碰瓷的条件错了。

正确的条件如下:设 S 是 a 中一个可以被 b 碰瓷子数组,则

  • S_1 = b_1
  • b 是 S 的子序列

  • 存在 i(1 \leq i \leq |b|) 满足 b_1 = b_2 = ... = b_i 且存在 j(1 \leq j \leq i) 满足 S_j \neq S_{j + 1}

可以证明这是充要条件。

最终写了一个贪心过了,总用时2h,得分:100


T3

题意:字符串 T 被称为 S 的旋律当且仅当 S 是通过 T 复制多次并连接后得到的字符串的前缀。最初 S 是空串,进行 n 次操作,每次操作会在 S 的开头或结尾插入一个字符,问每次操作后 S 有多少个旋律


 O(n^2) 的做法可以获得70,于是开始写KMP,然后因为不知道什么神秘原因无法通过大样例,调了一整场,得分:0


正解是二分 + 字符串哈希。


T4 

题意:有一个长度为 n 的数组 a_1,a_2,...a_n(a_i \in \left \{ -1,1 \right \}),有 q 次操作:

  • 1 p:修改 a_p 为 -a_p
  • 2 l r:在 a_l,a_{l + 1},...a_r 中找出最长的子序列 x_1,x_2,...x_m 使对于任意一个 i(1 \leq i \leq m)都满足 \sum_{j = 1}^i x_j \geq 0 且 \sum_{j = i}^m x_j \geq 0,输出长度。

赛时没看,得分:0


正解是结论题,答案为区间长度 + 区间和 - 最大字子段和,线段树维护即可。


最终得分:100 + 100 + 0 + 0 = 200

进步空间

T2用时过长,可以先把思路理清并简单证明后在开始写。

T3的70分做法假了之后可以考虑写低一档的部分分或写T4,尽可能拿分。

Day2

T1

题意:求 (\sum_{i = L_1}^{R_1} a_i) \times (sum_{j = L_2}^{R_2} a_j) 的最大值。


10min秒了,枚举 i,左右两边分别求最大子段和,得分:100

T2

题意:有 n 种玩偶,第 i 种玩偶的大小为 h_i,扔掉一个玩偶的损失为 c_i,数量为 p_i。需要扔掉一些玩偶,使得剩下的玩偶中,最大的玩偶的数量之和严格大于扔完后剩下玩偶总数的一半,求最小损失。k


贪心地从小到大做,用树状数组 + 二分维护,码量较大,用时1h20min,得分:100

T3

题面http://oj.daimayuan.top/contest/366/problem/3241

时间比较充裕,准备写正解,写了一坨4个关键字的dijkstra,无法通过大样例,调了一整场,得分:0

T4

题意:有 n 条线段,第 i 条线段左端点为 l_i,右端点为 r_i,一组线段的价值为该组所有线段的交集长度,每一组的价值都至少为 1,求把 n 条线段分成 k 组的最大价值和,无解输出 0


写完T2后先来写的T4,发现35分的暴力非常简单,用时20min,得分:35


正解是单调队列优化dp。


最终得分:100 + 100 + 0 + 35 = 235

挂分分析

实际上并没有挂分,最终得分和预期一样。

T3的dijkstra写复杂了,改成从 1 号点和 n 号点分别跑一次就可以了。

进步空间

T3的正解做法假了之后可以考虑写部分分,尽可能拿分。

Day3

T1

题意:定义 f(x,y) = \left \lceil \frac{x + y}{x\ or\ y} \right \rceil,求\sum_{i = 1}^n \sum_{j = i + 1}^n f(a_i,a_j)popcount(a_i) \le 4


先观察性质,注意到1 \le \frac{x + y}{x\ or\ y} \le 2,若 x + y = x\ or\ y ,f(x,y) = 1,否则 f(x,y) = 2

所以只要统计 a_i + a_j = a_i|a_j 的个数即可,因为 popcount 很小,所以直接容斥。

用时50min,得分:100

T2

题意:有一个字符串 SS_i \in \left \{ 'A','B' \right \},一次操作选择 \left [ l,r \right ],翻转 S_l,S_{l + 1},...S_r,问 S 是否能通过最多一次操作使 最长相同连续子串 < k


想正解想了1h+没有想出来,于是写了一个 O(n^2 log n) 做法,写了一个线段树维护最长相同连续子串,然后枚举 \left [ l,r \right ] 看是否符合条件。

预期得分:55,实际得分:0


正解是大分讨

T3

题意:定义 f(i) 为第 i 种字母的所有连续段的最长长度,有一个字符串 s,其中每个字符是前 k 个小写字母或 '?',问用前 k 个小写字母替换 s 中所有 '?' 后 min_{i = 1}^k f(i) 的最大值。


没怎么见过这种套路,想了45min,先去写T4了,最后只剩半个小时了,匆匆写了一个 O(n^k) 的做法,用时15min。得分:10分。


正解是二分 + 状压dp

T4

题面http://oj.daimayuan.top/contest/367/problem/3246

写子任务1(15分),发现居然写不出来,写子任务2(25分),发现居然还是写不出来,写子任务3(25分),可做,写了一个树状数组,用时45min。

预期得分:25,实际得分:0


预期最终得分:100 + 55 + 10 + 25 = 190,实际最终得分:100 + 0 + 10 + 0 = 110

挂分分析

T2挂了15分,原因是枚举 \left [ l,r \right ] 时 l 应该从 0 开始枚举,而我从 1 开始枚举。

T4挂了25分,原因是从 l 到 r 的用时应为 sum_{r - 1} - sum_{l - 1},而我写成了sum_r - sum_{l - 1}

进步空间

养成对拍的好习惯。

Day4

T1

题意:有 n 个建筑,把第 i 个建筑升到 j 级可以获得 \sum_{k =1}^j c_{i,k} (-10^9 \le c_{i,k} \le 10^9),如果所有建筑都在 x 级以上,可以额外货获得 d_x (-10^9 \le d_x \le 10^9) 分,问最多能得多少分。


想到 dp。

dp_{i,j,0/1} 表示 前 i 个建筑 每个建筑都在 j 级以上 是否有建筑刚好是 j 级 的最大分数。

转移: 

  • dp_{i,j,0} = dp_{i - 1,j,0} + max_{k = j}^m (\sum_{x = 1}^k c_{i,x})
  • dp_{i,j,1} = max(dp_{i - 1,j,1} + max_{k = j}^m (\sum_{x = 1}^k c_{i,x}),dp_{i-1,j,0} + \sum_{x = 1}^j c_{i,x})

 写了40min通过,得分:100

T2

题意:定义 c_k = max \left \{ a_i \times b_j \right \}(i \ and \ j \ge k),求 \sum_{i = 0}^{n - 1} c_i


观察了很久性质。

设 d_k = max \left \{ a_i \times b_j \right \}(i \ and \ j = k)

先考虑 a_i,b_i \ge 0 的情况,此时 d_k = max \ a_i(k \subseteq i) \times max \ b_j(k \subseteq j)

不妨设 x_i = max \ a_i(k \subseteq i), y_i = max \ b_j(k \subseteq j)

可以推出如下转移 x_i = max(a_i,max_{j = 0}^{log_n} x_{i\ or\ 2 ^ j}), y_i = max(b_i,max_{j = 0}^{log_n} y_{i\ or\ 2 ^ j})

则 d_k = x_k \times y_k

a_i < 0 或 b_i < 0 的情况同理。

最后 c_k = max_{i = k}^{n - 1} d_i

做了1h30min,负数的情况没有处理好,结束前3min发现,最后极限通过,得分:100

T3

题意:有一个长度为 n 的数组 a_1,a_2,...,a_n,一次操作可以让一个子数组中的每个数字加上任意整数,问使数组中所有数字互不相同最少要进行多少次操作。


打了子任务1(对于 1 \le i \le na_i = 1)。

注意到  \left \lceil \frac{n}{2} \right \rceil 一定能使数组中所有数字互不相同。

预期得分:9,实际得分:0

T4

题意:有 n 个货物,第 i 个货物重 w_i,货物会被按顺序放上卡车,只要不超过卡车的承重,这个货物就会被放上卡车。问如果要装 k 个货物,卡车的承重至少需要多少,对于 k = 1,2,...,n 输出答案。


想了很久如何用线段树实现正解,感觉很难写,放弃了。

打了子任务1(8分)和子任务4(8分),用时20min,得分:16


预期最终得分:100 + 100 + 9 + 16 = 225,实际最终得分:100 + 100 + 0 + 16 = 216

广告:正解

挂分分析

T3挂了9分,原因是 \left \lceil \frac{n}{2} \right \rceil 写成了 \left \lfloor \frac{n}{2} \right \rfloor。不要直接根据样例猜结论。

进步空间

T3要多思考,可以拿下子任务2或更多。

T4思路其实和正解差不多,要勇敢尝试去实现。

Day5

T1

题面http://oj.daimayuan.top/contest/369/problem/3251

一眼看上去很像二分,但仔细看发现没有单调性,直接懵逼。仔细想发现暴力的复杂度是对的,1h写完,得分:100

T2

题面http://oj.daimayuan.top/contest/369/problem/3252

分讨 + 贪心题,写了1h,得分:100

T3

题意:有一个 n 个点 m 条边的带权无向图,有 q 次询问,每次询问查询满足以下条件的 (x,y)(1 \le x < y \le n) 个数:

  • 存在一条从 x 到 y 的路径,路径上每一条边的边权 c_j \ xor \ d \le k

赛时想正解发现想不出来,打了 O(mq) 的暴力,用时1h。

预期得分:20,实际得分:0

T4

题意:有一个仅由 A 和 B 组成的字符串 S,有两种操作:

  • 花费 x 的代价在 S 的任意位置插入 AB
  • 花费 y 的代价在 S 的任意位置插入 BA

问把 S 变成 T 的最小代价,无解输出 -1


 想写 x = y 的部分分,但没写明白,得分:0


预期最终得分:100 + 100 + 20 + 0 = 220,实际最终得分:100 + 100 + 0 + 0 = 200

挂分分析

T3挂了20分,原因是 以为写的是O(mq) 的做法,但实际上是O(nq) 的。

Day6

T1

题意:他有 n 种颜色的宝石,每种颜色有 a_i 颗宝石,宝石展览方案的华丽值为 \sum_{i=1}^n (v_i)^{c_i},其中 c_i(0 \le c_i \le a_i) 为第 i 种颜色的宝石展览的个数,问不同展览方式华丽值的总和。


注意到每种颜色的宝石可以分开算贡献,第 i 种宝石的贡献为 \sum_{j=1}^{a_i} C_{a_i}^j \times 2 ^ {\sum_{k \neq i} a_k},由二项式定理得原式为 [(v_i + 1) ^ {a_i} - 1] \times 2 ^ {\sum_{k \neq i} a_k}O(n) 进行求和即可。

用时30min,得分:100

T2

题意:求有多少个长度为 2m 的序列 A 满足 A_i | n (1 \le i \le 2m) 且 \prod A_i \le n^m


写了一个 O(d(n)^{2m}) 的 dfs 做法,用时15min

预期得分:40,实际得分:20


正解:注意到满足 \prod A_i < n^m 的个数与满足 \prod A_i > n^m 的个数相同,所以只需要统计总个数和满足 \prod A_i = n^m 的个数即可。

T3

题面http://oj.daimayuan.top/contest/370/problem/3257写了一个 O(2^nn^2) 的做法,用时20min,得分:25

T4

题意:有一个 n 个点 m 条边的无向图,第 i 条边连接 a_i 和 b_i,长度为 c_i,问有多少条边满足在被删除之后 1 到 n 的最短路长度恰好加 1


从 1 和 n 分别跑 dijkstra,算出 dis_1 和 dis_n,将 1 到 n 最短路径上的边记录在E 中,接着记 pre_i 为 dis_1[i] 经过的边中属于E 的边数,suf_i 为 dis_n[i] 经过的边中属于E 的边数。枚举不属于E 中的边 (u,v,w),若 dis_1[u] + w + dis_n[v] = dis_1[n] + 1,则E 中前 pre_u 个边之后,后 suf_v 个边之前的边都是可以被删除的,将满足条件的边统计一下即可。

用时1h40min,预期得分:100,实际得分:20


预期最终得分:100 + 40 + 25 + 100 = 265,实际最终得分:100 + 20 + 25 + 20 = 165

挂分分析

T2挂了20分,原因是虽然 n^m 在 int 范围内,但在 dfs 的过程中会爆 int

T4挂了80分,原因是求 pre_i 和 suf_i 时的复杂度不对,TLE了,简单优化即可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值