ACM竞赛高校联盟训练 第10场 题解

A. Math loser
首先如果一个 L(x) L ( x ) R(x) R ( x ) 相同,那么必然不满足条件,所以我们可以排除 x x 为素数的情况。
那么我们只需要筛出所有的素数,那么一个数的 L(x) L ( x ) R(x) R ( x ) 必然是相邻的素数,那么我们就枚举 L L R,来按区间来统计答案惹。
现在考虑一个简单容斥,假如我们要计算的是只能 L L R整除的数的个数,那么我们需要计算出能被 L L 整除的数的个数,能被R整除的数的个数,然后减去 2 2 倍的同时能被L R R 整除的数个数即可。
既然能求出个数,那么按等差数列扩展一下就是求和了。

B. Another query on a graph
这个题目是我根据浙大月赛一题瞎想了一下得到的。
先考虑用并查集来维护区间连通性,因为是区间是动态变化的的,因此可以用莫队来转移。所以这题的解法是带撤销莫队 + 带撤销并查集。
先把同一块的左端点放在一起,左端点在同一块的按右端点从小到大排序。
如果左右端点在同一块,直接暴力计算答案。
如果不在一块,对右端点而言只有插入,对左端点而言,每次暴力加入之后再撤销。
贡献用并查集来计算,顺便一提带撤销并查集需要按秩合并。
因此总复杂度是O(nnlogn)

C. A man who has iron bone
签到题,“我就是退学,倒贴钱,也要坚持打ACM”“嘿嘿。退坑真爽”。

D. Delete substring
这个是我当时看错牛客一个题目的题意得来的
首先删的多肯定可以满足要求,单调性比较显然,因此可以二分。
枚举删掉的子串,可以用前缀和和后缀和快速得到新串的变化次数。
因此二分 + 前缀和后缀和就可以了。

E. Foolish meopass
经典题目,线段树每个节点维护13个标记,代表这个区间模13余的数是0到12的个数分别是多少。
每次区间赋值就相当于把这13个标记的位置循环右移,开个标记记录下次数,在询问的时候暴力更新即可。

F. Meow Meow Path
签到题,面试碰着的,随便模拟下就好了。

G. Huge and integer
可以证明和 a a 无关,答案就是phi(b)
考虑小于 b b 的且与b互质的一个数 x x ,那么x 1 1 2 b1 b − 1 的乘积 模 b b 的结果必然还是1 2 2 b1 b − 1
x x b不互质,那么 x x 1 2 2 b1 b − 1 的乘积 模 b b 的结果必然也与b不互质,而 a a b互质,这说明此时对答案不成贡献。
所以答案就是 phi(b) p h i ( b )

H. Sports queue
奇偶分开维护,建立两棵 Splay S p l a y 树,分别维护奇数位置的数列和偶数位置的数列。则:
对操作 0 0 ,可将两棵树上的对应区间的子树直接交换即可;
对操作1,将两棵树上对应的区间分别翻转;
对操作 2 2 ,两棵树分别求和相加即可。
各个操作时间复杂度均为O(logn)

I. Star War
对答案进行二分,用单调队列维护区间最大值最小值,直接搞即可。
整体时间复杂度 O(nlogn) O ( n l o g n )

J. Cal Substring
考虑 dp[i] d p [ i ] 代表当前匹配到第 i i 个位置的答案是多少,那么考虑转移,如果str[j]str[i]为回文串,那么就存在 dp[i]=dp[j1](ij+1) d p [ i ] = ∑ d p [ j − 1 ] ∗ ( i − j + 1 )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值