zoukankan      html  css  js  c++  java
  • nowcoder提高集训营第5场

    (比赛链接)[https://www.nowcoder.com/acm/contest/177#question]

    T1

    (题目链接)[https://www.nowcoder.com/acm/contest/177/A]

    首先考虑二维前缀和
    [l1, r1], [l2, r2]的解
    即ans([0, r1], [0, r2]) - ans([0, l1 - 1], [0, r2]) - ans([0, l2 - 1], [0, r1]) + ans([0, l1 - 1], [0, l2 - 1])

    对于最简单的情况
    即 r1 = r2 = 2^n - 1(所有的都是闭区间)
    组成一个数有2^n - 1中方案
    那么只需统计有多少个m的倍数小于2^n

    如果r1 = 2^k - 1, r2 = 2^n - 1
    组成一个数一共有2^k - 1种方案
    那么只需统计有多少个m的倍数小于2^k

    对于更普遍的情况 比如r1 = 1010
    我们可以把r1 + 1即1011拆成一堆比它小的数
    0*** 100* 1010
    这样就涵盖了所有小于等于r1的情况
    打星号处可以随便填,一共可以分成log种类型
    这样的话就有log(r1)组和log(r2)组相互匹配
    对于其中一组 a1(2^p) +(p位的随机),a2(2^q) + (q位的随机)
    那么它们可以构成的数就是(a1(2^p)) & (a2(2^q)) + (p位随机)
    然后判(a1(2^p)) & (a2(2q))到(a1*(2p)) & (a2*(2^q)) + (2^(max(p, q) + 1) - 1)里面有多少个m的倍数就可以了

    注意随时取模!模 *不模 = 爆炸

    T2

    (题目链接)[https://www.nowcoder.com/acm/contest/177/B]

    对与这样一张图 设一个边被经过的次数为t[] 我们可以证明如下点
    1.所有t[i] > 1的边一定在MST上
    2.所有t[i] <= 2

    结论一是来自这道题特du别liu的边权设定
    使致一个环上最大那条边的边权 大于环上其他边的边权和

    对于结论二的证明
    对于一条被经过k次的边 就像相当于在这两点间连k条边
    然后走的是个欧拉回路 而欧拉回路上每个点的度数为偶数
    要是一条边被经过两次以上 比如3次 那么就和经过一次没区别
    同理 偶数次和经过2次相同

    对于图上奇偶 我们的日tao常lu处理方法就是 抑或
    我们建一棵MST 统计好每一个点的度数 根据奇偶性染色
    然后从叶子到根调节每条边经过次数 使得每个点的度数为偶数

    注意if(vv != fa)dfs(); 哒哒哒。。。
    后面的东西是会执行的! 需要continue掉!

    T3

    (题目链接)[https://www.nowcoder.com/acm/contest/177/C]

    把s当作是t加入一些0、1形成的
    t由c个0,d个1组成
    那么就有c + d + 1个空隙可以填数

    但是这样会重哦

    那么 对于一个被构成的序列u 我们认为他是可以被记录的
    当且仅当原来的s在u中是最靠前的一个为s的子串
    比如 在101的第一个1和0之间加一个0 所得串就不可以被记录
    因为原来的s在u中的位置是{1, 3, 4}而{1, 2, 4}也是与s相同的子串 并且比原来的s靠前
    但在第二个0和1之间加一个0 所得串可以被记录

    所以我们发现 在1前面不能加1 在0前面不能加0 但在最后可以随便加
    所以枚举在最后加了x个0,y个1
    即为在d+1个空里插a-c-x个0, 在c+1个空里插b-d-y个1(最后一个空两个都能放)
    之后就是个插xiao板ao了
    对于每个x和y 共可以构成C(a-c-x+d-1, d-1)C(b-d-y+c-1, c-1)C(x+y, x)个串
    对于每组(x, y)求和即为答案

  • 相关阅读:
    hdu 4002 Find the maximum
    hdu 2837 坑题。
    hdu 3123
    zoj Treasure Hunt IV
    hdu 2053 Switch Game 水题一枚,鉴定完毕
    poj 1430 Binary Stirling Numbers
    hdu 3037 Saving Beans
    hdu 3944 dp?
    南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
    fzu 2171 防守阵地 II
  • 原文地址:https://www.cnblogs.com/hjmmm/p/9797386.html
Copyright © 2011-2022 走看看