THUWC2019 游记

DAY1

  开场先看 t1,发现答案的分子就是 \(\sum_i\) 颜色 \(i\) 在 A 中的出现次数乘上颜色 \(i\) 在 B 中的出现次数,分母就是 B 的长度,就去写了一个按颜色的出现次数分类的东西,复杂度为 \(O(n\sqrt q+q\sqrt n)\),交上去直接 pp 了。

  然后去看 t2,感觉是个分类讨论题,想了一下感觉第一问还是很可做的,就去写第一问了。

  过了一会发现 A 题空间是 \(O(q\sqrt n)\) 的,就去改成了 \(O(n\sqrt n)\) 的。

  然后就去把 t2 的第一问写完了。

  接着就去做 t3 了,先把暴力写了,然后看了一下提示,说是要容斥。想了一会并没有想到怎么容斥。

  被打爆了。

  pt 分:\(100+60+10=170\)

  出来后欧稳欧、zjt 都说 t3 是傻逼题。

  晚上鸽了开幕式去睡觉了。

DAY2

  先看了 t1,感觉可以点分。过了一会发现直接线段树合并就好了(当然也可以离线树状数组),花了半个小时写了一下交上去就 pp 了。

  t2 看到 feature2 可以把重心求出来就去想点分了。怎么想都只会 \(O(n\log^2n)\) 的垃圾做法。写完后交上去直接过了除了 \(lim1=3999,lim2=3997\) 的点。然后构造了几组数据卡了卡常,就没管了。

  t3 我好像之前看过类似的题,想了一下,直接对凸包的最后一条边DP是 \(O(n^4)\) 的,按极角排一下序就 \(O(n^3)\) 了。于是就花了半个多小时写完了。感觉还是挺好写的。

  然后回来看 t2,发现还是不会。

  被打爆了。

  pt 分:\(100+79+100\)

  出来后 zjt 又说 t2 是傻逼题,只要没去想点分治,一层层做就 win 了。

DAY2+

  8 个图像处理题。

  1. 计算一个序列的 ADLER32 校验码(20分)
  2. 计算一个序列的 CRC32 校验码(30分)
  3. 读取简单 PNG 图片(50分)
  4. 写入简单 PNG 图片(50分)
  5. sobel 算子 边缘检测(20分)
  6. halton 序列 随机采样(20分)
  7. 基于像素的纹理合成(30分)
  8. 基于块的纹理合成(80分)

  开场翻了一下手册,感觉要从前往后做。

  先花了半个多小时把前两个点写了,然后花了一个半小时搞中间两个点,最后剩下一点时间把第五个点写了。

  感觉前面几个点都没什么技术难度,把文档读完然后对着文档写就好了。

  读文档一定要仔细,有几个同学就因为读漏了某些条件被坑了。

  感觉正常人都不太能写得完。。。我只写了前面五个点。神仙 zjt 写完了前面七个点。

DAY3

  上午在报告厅听讲评,顺便和神O、神J、麦老大、老K聊天。讲题人说两天的 t3 都只有个位数的人过。

  下午听学长们介绍算协、科协,听 LazyJazz 讲提前上学、光线追踪、写游戏,还有清华老师吹水。然后就发协议奖状了。

  今年因为某些原因,不能直接发协议,只能先发奖状。

题解

DAY1

A

  显然答案的分子就是 \(\sum_i\) 颜色 \(i\) 在 A 中的出现次数乘上颜色 \(i\) 在 B 中的出现次数,分母就是 B 的长度。

  把询问拆成四个前缀的询问,然后直接莫队就好了。

  块大小设为 \(O(\frac{n}{\sqrt q})\),复杂度为 \(O(n\sqrt q+q\log q)\)

B

  大力分类讨论。

C

  先把第一次 \(A=B\) 就停止变成要求 \(m\) 次操作后 \(A=B\)

  记 \(f(i)\) 为第 \(i\) 次操作后 \(A=B\) 且前面都不满足要求的方案数,\(g(i)\) 为第 \(i\) 次操作后 \(A=B\) 的方案数,\(w\)\(A=B\) 之后每次操作可选的方案数,就有 \(f(i)=g(i)-wg(i-1)\),求一下和就有 \(\sum_{i=1}^m f(i)=\sum_{i=1}^m g(i)-\sum_{i=0}^{m-1}wg(i)\)

  然后容斥,枚举最终有多少个 \(i\) 不满足 \(a_i=b_i\),然后就是要求:某些点 \(a_i\geq b_i\),某些点 \(a_i>b_i\) 的方案数。

  对于每一个 \(b_i\) 的值分别DP。

  每一层记 \(h_{i,j}\) 为考虑了前 \(i\) 个位置,不合法的区间个数为 \(j\) 的方案数(乘上容斥系数)。因为合法区间个数是 \(O(n^3)\) 的,不合法的区间个数只有 \(O(n^2)\)。转移的时候枚举下一个位置是选 \(b_i\) 还是选 \(b_i+1\),直接多项式乘法即可。

  时间复杂度:\(O(n^4)\)

DAY2

A

  对于每一条边 \(i\),计算子树内有多少个点 \(j\) 满足 \(a_i+c_j\leq b_i+d_j\) 以及 \(c_j\)\(d_j\) 的和。子树外同理。

  然后随便搞搞就好了。

B

  先用 \(n-1\)feature1 算出每个点的深度,然后对于每个点求它的父亲是上一层的那个点,每个点求父亲可以用一次 feature2\(O(\log n)\)feature1 操作完成(要注意到询问的集合是可重集)。

C

  \(\overline{x}=\frac{\sum x}{m},\sigma^2=\frac{x^2}{m}-{(\frac{\sum x}{m})}^2\)。这样就只用计算方案数、面积和、面积的平方和了。

  DP出下凸壳的两个端点为 \(i,j\) 的方案数:记 \(f_{i,j,k}\) 是左端点为 \(i\),最后两个点为 \(j\)\(k\) 的信息。转移时枚举下一个点 \(l\),判断是否可行,转移到 \(f_{i,k,l}\)。按极角排序一下然后用双指针扫一下可以优化到 \(O(n^3)\)

  然后把两个凸壳拼在一起就好了。

DAY2+

  对着文档码码码就好了。

posted @ 2019-01-23 21:43 ywwyww 阅读(...) 评论(...) 编辑 收藏