2016中国大学生程序设计竞赛(长春)

2016中国大学生程序设计竞赛(长春)

1002.Fraction

  • 写个分数结构体。

1005.The Fastest Runner Ms. Zhang

  • 最后的图形是个菊花状的,即一个环上的每个点上长了一棵树。
  • 那么方案分两种:两个叶子的根为环上两个不同点,或者为同一个点。
  • \(f(u)\)表示遍历以\(u\)为根且最后返回\(u\)的代价,\(d(u,v)\)表示环上两点的最近距离。
  • 从1到2的代价为$$\sum{f_i}+2(d(u,v)-1)+(L-d(u,v))-dep(1)-dep(2)$$
  • 整理下,即表示为$$C+d(u,v)-dep(1)-dep(2)$$其中\(C=\sum{f_i}+L-2\)
  • 如果给环定义一个起点,则\(d(u,v)=d(v)-d(u)\),那么代价可以表示为$$C+d(v)-d(u)-dep(1)-dep(2)$$可以看出这是一个可以用单调队列维护的东西。
  • 如果两个叶子在同一个环上呢?显然我们想让这两个点之间的距离越大越好,那么就是求一下树的直径就好了(写的时候忘记可能跨过环上的点了。。。疯狂WA)。

1006.Harmonic Value Description

  • 注意$$2k\le n$$
  • 最小值的一个序列$$1,2,...,n$$此时\(\sum{\gcd(p_i, p_{i+1})}=n-1\)
  • 每次把相邻偶数放一起,则gcd增加1。
  • 考虑到只有\(\lfloor\frac{n}{2}\rfloor\)个偶数,将\(k\)个连续偶数放一起即可。

1007.Instability

  • 1、2个点是稳定的;6个点以上是不稳定的,直接组合数求下即可。
  • \(\binom{50}{5}\)约为\(2\times 10^6\)\(\binom{5}{2}\)用状压连通点即可判断。

1008.Sequence I

  • Hash或kmp

1009.Sequence II

  • 主席树维护有效位置

1010.Ugly Problem

  • 每次构造前缀相同的回文串
  • 若比\(s\)大,则选择离中心最近的非零位置减1。
  • 这样两次即可达到长度减半,所以\(n\)不会超过50。

1011.Binary Indexed Tree

  • 考虑某个位置\(p\)的贡献:当一个区间端点含\(p\)而另一个不含的时候,\(p\)会贡献一次,如果统计出含\(p\)的个数\(cnt\),则总贡献为$$(n+1-cnt)\cdot cnt$$
    需要考虑和0配对。
  • 考虑一个位置\(x\),会访问到\(x, x\oplus lowbit(x),\cdots\)这些位置。
  • 这些位置在二进制表示下为\(x\)的一个前缀且末位为1。
  • 容易想到数位dp\(f(i,last,limit)\)表示到第\(i\)位末位为\(last\)是否达到上界\(limit\)的方案数。
  • 需要注意的是,记忆化时需要记录\(ans\)的增量,否则会少记录一些方案。
posted @ 2016-10-04 23:01  mcginn  阅读(533)  评论(0编辑  收藏  举报