zoukankan      html  css  js  c++  java
  • Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)

    (感觉这场难度都不大啊)

    A. Digits Sum

    $lfloorfrac{n+1}{10} floor$

    B. Reverse String

    枚举

    C. Penalty

    枚举

    D. Backspace

    倒着试图匹配,如果不匹配就连删两个。

    E. Permutation Shift

    注意到 $mleqfrac{n}{3}$,则一个合法排列的环数 $cgeqfrac{2n}{3}$,长度为 $1$ 的环数 $dgeqfrac{n}{3}$(这是由于 $d+2(c-d)leq n$),因此至多只要检查 $3$ 个。

    F. Pairwise Modulo

    新加一个数的时候,要计算他 $mod$ 其他数 和 其他数 $mod$ 他,分别用两个 BIT 维护即可。由于所有数互不相同,BIT 上修改的次数为调和级数,总复杂度两个 log。

    G. Common Divisor Graph

    分个类讨论一下:如果两个数都是偶数,必然连通,那么答案为 $0$。如果两个数恰好一个是偶数一个是奇数,且不连通的话,答案为 $1$。这两个都很好搞,求出所有数的质因子做并查集即可。如果两个数都是奇数,且不连通,答案要么为 $1$ 要么为 $2$,如果存在一个数使得操作它之后能让这两个数连通,则答案为 $1$,这个只需要对每个数求出操作它之后能连通的所有连通块,存在一个 set 中即可。

    H. XOR and Distance

    建出 trie,考虑用 $(p, mask)$ 表示节点 $p$ 所在子树中,这些数异或的值为 $mask$,最小缝隙和最小值最大值是多少。由于 $mask$ 只需要考虑子树内的位,因此总状态数 $O(k2^k)$。然后只要分情况讨论,进行转移即可。

    I. Stairs

    把极长的这种连续段找出来,每个数肯定恰好被覆盖一次。所以根据 $a$ 数组可以直接推断出所有极长的连续段的长度组成的序列 $b$。现在的问题就变成了给定 $b$ 求满足 $b$ 的排列个数。在相邻两个连续段之间的断点不好处理,考虑容斥,即强制某些连续段被合并,然后计算方案的话,就是合并后的连续段数的阶乘 × 2 的长度非 1 的连续段个数次方。考虑分治 NTT,记录最左和最右连续段旁边的这两个断点是否被合并,就可以了。

  • 相关阅读:
    常用模块——time模块,datetime模块
    开发目录的规范

    模块
    day17作业
    面向过程编程
    函数递归
    谈谈作为一个菜B的培训感受
    絮叨机房精密空调的制冷剂
    接入机房产生冷凝水
  • 原文地址:https://www.cnblogs.com/Master-Yoda/p/15175698.html
Copyright © 2011-2022 走看看