THUSC 2021 游记

Day 2459350

早上去报道,分在了西溪校区。(据说分校区是按照进省队次数奇偶性分的。)中午必须在食堂吃,而且一次饭 30 元。/kk

然后去试机,感觉试机题都挺水的。

T1 | A+B Problem

rt。没写数据范围。

T2 | 维克托 | vector

模拟一个 vector 插入数、删除数,并保持其单增的过程。计算每次操作“移动已有元素的次数”。

具体来讲,vector 会有一个大小及容量,初始分别为 (0)(2)。插入一个数时,若新的大小大于容量,容量翻倍,移动元素个数等于原大小;否则在尽可能靠后的地方插入该数,并将其后的元素顺移。删除一个数时,若新的大小小于等于容量的 (1/4),容量减半,移动元素个数等于新大小;否则删除该数尽可能后的出现位置,并将其后的元素顺移。

(nleq 10^4)

1 s。

T3 | 李斯特 | list

维护一序列,保证其无重复元素。支持:

  • 在一个数之后插入一个数;
  • 查询一个数是否在序列中;
  • 查询一个数的后继;
  • 删除一个数;
  • 输出序列;
  • 清空序列;
  • 反转序列;
  • 好像还有一个但是记不清了。

(n,mleq 10^6)(a_ileq 10^7)

? s。


先写了 A+B,然而 A+B 没有数据范围,开了 long long 过了 pretest,快进到 FST

T2 的小模拟有个 for 写反了,调了一会。

T3 拿 list 做一做就行,一边过了。

中途还发现系统某些页面的时间是 8:00,于是做了一个 bug report。

同考场的 asd ssh -v,很快啊,各个监考人员都来了。


下午 Day 1。

T1 | 搬东西 | move

(n) 个物品,依次编号,各有体积。有一背包,一次至多装下体积和为 (m) 的物品。每一轮,从剩余物品中取出尽可能多的物品;若物品个数相同,优先选择编号在升序排列后字典序最大的一种。问多少次取完所有物品。

(nleq 50000,mleq 10^9)

2.5 s,1024 MB。

T2 | 白兰地厅的西瓜 | watermelon

给定一树,点有点权。求各路径的最长上升子序列的最大值。

(nleq 10^5,a_ileq 10^9)

1 s。

T3 | Emiya 家明天的饭 | emiya

(n) 个客人,(m) 道菜。每个客人有一些喜欢、不喜欢的菜。你要选定一个菜的集合,若其包含一个客人不喜欢的菜,他会离开;对于没有离开的客人 (i),他会为 第 (j) 道菜给 (a_{i,j}) 元的红包。最大化红包和。

(nleq 20,mleq 10^6)

3 s。

T4 | 种树 | planttree

通信题。用 __int128 编码一棵树(无标号,有根,儿子有序)。(m) 组询问。

(nleq 70,mleq 10^5)

1 s。


T1 花了几分钟胡了个做法,先写了个把数据结构替换成暴力的做法。看了一会后面的题之后又回来写 T1 的树套树,卡了卡常过了。

整完 T1 去写了 T2 的暴力,写完感觉正解是点分治,于是把一个玄学做法强行套了一层点分治做;写到一半感觉不一定写得出来,赶紧写 T3 T4 暴力。接着回到 T2,写到考试只剩半小时,正确性过了,但 TLE 了。又看了一下 T4 只有两个儿子的部分分,于是写了一发结果 TLE 了,最后 pretest 200 当场暴毙。/kk

Day 2459351

T1

实现 bmp 文件的写。

T2

给定空间中的一个三角形和一条射线(有向直线),判断射线是否与三角形相交,返回射线起点与交点的距离,并给出交点、法向量。

库提供了:

  • 三点确定一平面;
  • 确定射线与平面的交点;
  • 求三角形面积;
  • ……

(渲染会得到 cornell box 场景的深度图。)

自此之后所有题目均提交渲染出的位图而非代码。

T3 / T4

实现给定光源位置、漫反射表面上一点,求光源对该点亮度的贡献。(从而实现漫反射表面)

实现给定法向量、入射光方向,求反射光方向。(从而实现镜面反射表面)

(渲染分别会得到

  • cornell box 场景;
  • 几个球,有的球是镜面反射。)

T5

给定俯仰角、偏航角、相机矩阵,求方向向量。(从而实现全景相机)

(渲染会得到 T4 的全景图。)

T6

给定方向向量,求俯仰角、偏航角。(从而实现球面贴图)

(渲染会得到一张世界地图,其中北京所在经线位于中央,且有晨昏线效果;附赠了一张从广东上空俯视地球的图。)

T7

实现理想漫反射模型的路径追踪部分。由于漫反射时的积分是用蒙特卡洛法计算的,图片收敛会较慢。

若实现了直接光照,这题可以更快收敛。

(渲染会得到更优质的 cornell box 场景。)

T8

优化射线与模型求交的过程,使之渲染得更快。

(渲染会得到斯坦福兔子。)


开局先读一下 T1 和 guide.pdf 的前言,得知要做光线追踪。再看了一下题目之间的依赖关系,整体上是后面的依赖前面的。

T1 题面把做法描述得很清楚了,用 fwrite 来做就行了。结果有一堆细节写挂,肉眼看图片又看不出问题,diff 有有差异。直到拿 Python 对着文件头比较才看出锅。

看了一眼 T2 发现是奇妙计算几何,由于不会赶紧去看 math&geometry.pdf,发现里面完全是手把手教学;里面没有教三点确定平面,到 .h 里逛了一圈,看到里面啥都有,于是写了一会就过了。

T3 T4 的题面开始看不懂了,于是去读手册。先写了 T3,得到的结果尽是纯黑纯白;由于不知道 T4 依赖于 T3,加之 T3 渲染特别慢,于是去做 T4,一直看着很对劲但是就是过不了。回过去看 T3 求 (cos) 的函数,发现少除了一个 (|vec b|),改完发现 T4 对劲了。(地面颜色看得出来了)于是渲染一波 T3,也过了。

T5 是个简单三角函数;一开始没有乘相机矩阵,导致相机位置不对,看不到地面。

T6 几乎就是 T5 反过来,由于符号问题产生了一堆奇怪地图。

做到 T7 还剩一个小时,但 T7 涉及巨大多科技,看懂就花了半个小时。最后半个小时知道自己写不出来,就开始很悠闲地写,最后两分钟得到了一个输出全黑图片的程序。


下午讲题。主办方非常咕,提前溜了。

知识共享许可协议
若文章内无特别说明,公开文章采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
原文地址:https://www.cnblogs.com/wallbreaker5th/p/14778279.html