• HYNB Contest 7:2017 Asia HCMC Vietnam National Programming Contest


    A. Another Query on Array Problem


    B. Board Covering


    C. Cumulative Sums

    题意

    • (A_1=1,A_i=A_{i-1}+sod(A_{i-1}),sod(X))(X)的十进制数位和
    • (S_n=sum_{i=1}^{n}A_i),求(S_n)(10^9+7)(n≤10^{15})

    做法

    • 先考虑怎么求(A_n)的值
    • 初步想法:把(A_i)拆成高位和低位,设高位为(X),固定高位,那么对低位的影响就是每次多加了个(sod(X)),直到加到对高位有进位时,(sod(X))发生了改变。可以把低位调大点使得每次只会向高位进位一个1,因为(sod(X))很小,所以可以dp出所有状态,即(dp[i][j])表示低位为(i)(sod(X))(j),一直加到向高位进位为止转移的次数以及进位之后的低位是哪个数。这样高位可以O(1)转移了,然而这样复杂度还是非常高。
    • 比赛时思路就卡在了这里,认为如果继续对高位再拆分成若干段的话,那么对于每一段,我需要dp的时候记录所有低位的值,那么状态数其实和不拆分是一样的,没什么卵用
    • 其实分析一下就会发现,我们并不需要记录低位的所有可能的值,只需要记录刚进位之后低位的值就可以转移了呀,这样每一段状态数就很少了,为啥没想到。。。
    • 于是直接把低3位划分成一段,其他每一位一段就好了,求和的话多记录个和就好了

    D. Delicious Bubble Tea

    签到


    E. European Trip

    做法

    • 可以费马点。但不会。
    • 三分套三分。

    F. Familiar Digit

    • 思路挺直接的一个经典的数位dp,但是调了比较久,有点蠢

    G. Ginger Candy

    做法

    • 注意到数据范围。
    • 只需考虑最小生成树权值前 2 小的非树边。

    H. Nim Cheater

    题意 n 堆石头,选择至多 n-2 堆石头,每堆石头弃置若干个,求 xor 等于 0 方案数。

    做法

    • 只需造轮子求满足 (0leq x_ileq a_i),xor 和为 k 的 x 序列方案数,就无敌了。抓着轮子求【总的方案数】-【都不相等的方案数】-【恰有一堆相等的方案数】即可。
    • 怎么造轮子?
    • 从高位到地位逐位考虑,当前在考虑第 B 位,考虑这位上为 1 的所有数字,如果某个数字在这位(第 B 位)设为了 0,那么其它数字的第 B-1 至第 0 位可以乱填,第 B 位乱填不得,我们来做个简单的 DP。
      • (f[i][0/1]) 表示考虑确定下前 (i)个(第 B 位为 1的)数字,其中奇数/偶数个数字第 B 位填 1 的方案数。
      • 第 B 位全填 1 是不可取的!因为至少得保证有一个填 0。
      • 全填 1 递归到下一层解决。

    I. Integer Rotation


    J. Jewelry Box

    做法 求导,求极值。


    K. Keep the Parade Safe

    • 求一下严格凸包,对严格凸包只有三个点的情况分类讨论

    L. Let's Play Monopoly!

    • 赛中:好难,不可做
    • 赛后:怎么他们AC代码长度只有800?再好好想想!
    • 自闭若干小时后:tmd读错题了吧!
    • 重读了一遍题之后:题意没毛病啊?咋回事啊?
    • 瞅了眼数据范围:(u_i<v_i),没环,SB题

  • 相关阅读:
    C++基类的析构函数定义为虚函数的原因
    android的学习网站
    QT显示url图片
    Ubuntu安装JDK
    linux下打包压缩和解压命令
    嵌入式目录
    QT pri 文件的作用
    QT pro文件详细写法+实例
    Computer(树的直径做法)
    树的直径
  • 原文地址:https://www.cnblogs.com/FST-stay-night/p/11508358.html
Copyright © 2020-2023  润新知