2022.8.9 模拟赛

T0

  小清新签到题,直接暴力 b f s bfs bfs 就过掉了,但是中间要记录每个字母有没有被走过,走过就不走了。不然如果整张图全都是同一个字母的话时间复杂度就炸掉了 就在这里挂掉 9 分

T1 杰哥的数论

  让你很快的判断分数 p q \frac pq qp b b b 进制下是否为无限循环小数。

  根据一些常识,我们知道 p q \frac pq qp 是否循环跟 p p p 没啥关系,所以我们先给她们约分一下然后只关注 q q q(这里要特判 p = 0 p = 0 p=0)。

  然后我们发现给一个数 1 q \frac 1q q1 乘上一个 b b b 就相当于在 b b b 进制下把小数点右移一位。所以如果这个小数是有限的的,那么就存在一个 k ∈ N ∗ k \in N^* kN 使得 q ∣ b k q \mid b^k qbk

  于是我们就考虑一直给 q q q 除上 gcd ⁡ ( q , b ) \gcd(q, b) gcd(q,b),直到这俩玩意儿互质。此时如果 q = 1 q = 1 q=1 那么就说明 q q q 的质因子 b b b 都有。那么也就是说存在 k k k 使得 q ∣ b k q \mid b^k qbk,时间复杂度是 O ( T log ⁡ 2 q ) O(T\log^2q) O(Tlog2q) 的。

T2 杰哥刷墙

20pts

  有 20 p t s 20pts 20pts 是矩形的情况,据机房大佬 c m y cmy cmy 说这一部分的规律比较好找,答案就是:

a n s = 2 n + 2 h − 2 ans = 2^n + 2^h - 2 ans=2n+2h2

  就直接 O ( log ⁡ n ) O(\log n) O(logn) 快速幂就做完了。

T3 杰哥的数据结构

10pts

  直接按照题面模拟,复杂度 O ( m n 2 ) O(mn^2) O(mn2)

40 pts

  维护一个线段树支持单点修改,区间查询,我们发现一个性质,对于一个左端点 i i i 来说,她向右扩展之后的 o r or or 值是非严格单调递增的,所以我们可以考虑二分得到一个点 p o s pos pos,这个点是第一个大于等于 x x x 的右端点,那么这个点 i i i 的贡献就是 v − p o s + 1 v - pos + 1 vpos+1

  二分每次 c h e c k ( m i d ) check(mid) check(mid) 都要线段树区间查,所以复杂度是 O ( m n log ⁡ n ) O(mn\log n) O(mnlogn) 的。

50 pts

  因为 x = 0 x = 0 x=0,所以答案就是:

a n s = 1 2 ( r − l + 1 ) ( r − l + 2 ) ans = \frac 12(r - l + 1)(r - l + 2) ans=21(rl+1)(rl+2)

100pts

  这里我们在上面已经发现了,对于一个左端点 i i i 来说,她向右扩展之后的 o r or or 值是非严格单调递增的。是因为二进制上的每一位变成 1 1 1 之后就不可能再变成 0 0 0。正因为如此每次向外扩展的时候产生的不同的 o r or or 值只可能有 l o g 2 max ⁡ { a i } log_2 \max \{a_i\} log2max{ai} 个。

  知道这个性质之后,就会有一个很巧妙的做法。我们还是考虑线段树,但是这里的线段树的每个节点上维护的东西不一样了。对于一个节点 ( t [ p ] . l , t [ p ] . r ) (t[p].l, t[p].r) (t[p].l,t[p].r),维护一个 a n s ans ans 表示这个区间的答案(也就是把题目中的那个式子的 u , v u, v u,v 换成 t [ p ] . l , t [ p ] . r t[p].l, t[p].r t[p].l,t[p].r)。再维护一个从左端点向右扩展时每一次得到新的 o r or or 值时下标和从右端点向左扩展时得到新的 o r or or 值时的下标。

  因为 o r or or 值最多只有 log ⁡ \log log 个,所以 p u s h u p pushup pushup 可以在很快的时间内做完,然后题目给出一个区间询问的时候就线段树区间查询就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值