zoukankan      html  css  js  c++  java
  • 福建省队集训 20180712

    福建省队集训 20180712

    交互题

    有一天,汪巨打算归还他欠 ysy 的 1010 个鸡排的一部分。于是他到了鸡排店,发现店里一共有 109 种鸡排,编号为 1 到 109,其中有 a 种鸡排是不辣的,他打算把每种不辣的鸡排买 b 个还给 ysy。

    汪巨带着几卡车的鸡排回到学校,把鸡排从包装袋里倒出来,数了一天一夜,发现居然没有 ab 个 鸡排,少了一些。经过分析,他发现有一种鸡排的包装袋破了,所以有一种鸡排少了一些,这种鸡排只 剩下了 x 个(1 ≤ x ≤ b − 1)。

    由于鸡排实在太多了,汪巨懒得再数一遍了,他就把鸡排全给了 ysy,并告诉 ysy 少了哪种你自己 数数吧。由于 ysy 是鸽子,他就把这个光荣的任务交给了你。

    由于你的脑容量没有 ysy 大,并且你也很懒,所以你只能使用不超过 1MB 的内存把鸡排一个一个 检查过去,并且输出少的那种的编号。

    给你多个数(<=5e6),采用交互库的方式读入,并且在读入完之前不知道有多少个数,空间只有1M也保存不了。这些数里面有一种数个数比其他数都少,并且其他数的出现次数保证相等且>=2,种数也>=2,求少的这种数。

    考虑二进制,先记录头两个出现的数,如果出现次数不同,那么输出出现次数少的,否则知道了其他数的出现次数,设为b。

    那么对于二进制的每一位记录编号包含这一位的数的个数。如果要求的数包含这一位显然个数不能整除b,否则能够整除。枚举位数统计即可。

    传统题

    ysy 是一位优秀的炉石传说玩家。在 2033 年一次更新中,炉石新出了一张 10 费卡,它的效果如下: 检验对方场上的随从的生命值,求出最长连续相同的一段的长度,并对英雄造成等于这个长度的伤害。

    ysy 觉得这张卡十分垃圾。假设对面场上有 n 个随从,生命值为 [1, m] 的整数,那么他想知道这张 卡在所有情况下能打出的伤害之和。

    他当然会算了,但是他想让你检验一下。由于答案可能会很大,对输入的质数 p 取模。

    一句话题意:你需要求出所有长度为 n 的,每个元素为 [1, m] 的整数的 mn 个序列的最长连续相同 子段长度之和。

    最长连续相同子段长度就是最长的所有数都相同的一段的长度,例如 {1, 2, 3, 4, 3, 2, 2, 4, 4, 4, 5} 最 长连续相同子段长度为 3。

    考虑枚举答案,

    [egin{aligned} ans&=sum_{i=1}^n i*G(i)\ &=sum_{i=1}^n G(ansgeq i)\ &=sum_{i=1}^n(m^n-G(ans<i)) end{aligned} ]

    (F(i)=sum_{jleq i}G(i)),考虑计算(sum_{i=0}^{n-1} F(i)),枚举分成了j段并且容斥出现个几个>i的段。第一段有m种颜色可以选,其他段的颜色不能和上一段相同,那么

    [egin{aligned} sum_{i=0}^{n-1} F(i)&=sum_{i=0}^{n-1}sum_{j=1}^n m*(m-1)^{j-1}sum_{k=0}^j(-1)^k{kchoose j}{n-ik-1choose j-1}\ &=msum_{i=0}^{n-1}sum_{j=1}^n (m-1)^{j-1}(-1)^ksum_{k=0}^j{kchoose j}{n-ik-1choose j-1}\ &=msum_{i=0}^{n-1}sum_{k=0}^n(-1)^ksum_{j=k}^n(m-1)^{j-1}{kchoose j}{n-ik-1choose j-1}\ &=msum_{i=0}^{n-1}sum_{k=0}^n(-1)^kfrac{1}{n-ik}sum_{j=k}^n(m-1)^{j-1}{kchoose j}{n-ikchoose j}j\ end{aligned} ]

    考虑后面的

    [sum_{j=k}^n(m-1)^{j-1}{kchoose j}{n-ikchoose j}j ]

    这能快速算的话就可以枚举ik了。讨论组合意义,有(n-ik)个球,我们先从中选出 (j) 个,再从选出的 (j) 个中选出 (k) 个。在 (j) 个球中我们选出一个特殊的球,对于剩下的球用 (m-1) 种颜色染色。

    考虑讨论这个特殊的球是不是这 (k) 个球中的,那么我们可以把它改成:有 (n-ik) 个球,我们从中选出 (k) 个。接下来分两种情况:

    1. (k) 个中选出一个特殊的球,把 (k) 个球中不特殊的用 (m-1) 种颜色染色。在剩下的((n-ik-k) 个)球中选出一个子集,用 (m-1) 种颜色染色。这种方案数是(k*(m-1)^{k-1}m^{n-ik-k})

    2. (k) 个球用 (m-1) 种颜色染色。在剩下的( (n-ik-k) 个)球中选出一个特殊的球,在其他剩下的( (n-ik-k-1) 个)球中选出一个子集用 (m-1) 种颜色染色。这种是((m-1)^k(n-ik-k)m^{n-ik-k-1})

    最后再乘上(n-ikchoose k),那么枚举k和ik即可。

  • 相关阅读:
    SpringBoot整合系列-整合H2
    SpringBoot整合系列-整合Swagger2
    BZOJ3626 [LNOI2014]LCA
    BZOJ4475 [Jsoi2015]子集选取
    BZOJ4466 [Jsoi2013]超立方体
    BZOJ3997 [TJOI2015]组合数学
    BZOJ3996 [TJOI2015]线性代数
    BZOJ2227 [Zjoi2011]看电影(movie)
    BZOJ2337 [HNOI2011]XOR和路径
    BZOJ2330 [SCOI2011]糖果
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/13070607.html
Copyright © 2011-2022 走看看