• THUSC2021 游记


    THUSC2021(清华大学计算机系2021年“大中衔接”研讨与教学活动) 游记

    Day 0

    做了好长时间的火车。

    杭州好热啊,石家庄还是春天呢,杭州早就是夏天了。

    (估计当地人会觉得看到了一群东北人)

    不过确实是我参加的第一次全国性质的OI线下赛。

    Day 1

    上午测试赛,第一题简单 A + B,第二题模拟 vector,第三题模拟 list(或直接用 list)。到最后还没调出来 T3 哪里挂了 /kk

    pretest 赛制,会有 fst 风险(不过看起来 sample 和 pretest 还是挺强的?至少 T2 的 sample 和 T3 的 pretest 是这样的)

    下午真正的 Day1。

    上来开 T1,感觉没什么思路。看到 (nle 50000, tl = 2.5s),感觉应该是小常数 (O(n^2)) 题,可是想来想去只会 (O(n^2 log)) 的暴力线段树。有点小自闭,T1 都不会。

    不管了,先看 T2。尽管 T1 不会 T2 也不敢太仔细想,但是那个链的部分分的提示太明显了,这题就是要让求个树上“最长上升子序列”。考虑到 LIS 共有两种做法,我猜测它可能会考二分 DP 数组那个做法。感觉可以通过点分治之类的方法固定 LCA,然后用一个“最长上升子序列”和“最长下降子序列”拼一块。发现不用点分治,直接枚举 LCA,启发式合并即可。稍加思考后把启发式合并改成了长链剖分。这样就得到了 (O(n log n)) 的可过算法。但是感觉比较难写。

    口胡切了道题信心倍增,再看 T3。一眼觉得是维护 DP 数组 (f(S)) 表示保留 (S) 这些人的最优获益,逐列转移。不难发现转移的时候一个菜的贡献大致是要求所有满足 (S) 的子集且一定包含 (i)(T)(f(T)) 都加上一个值,然后直接出了个 (O(nm + n^2 2^n)) 的可过做法,不过又想了想觉得“一定包含 (i)”这个条件可以容斥掉,毕竟已经转化成了个计数问题而不是最优化问题。所以变成 (S) 子集加 (S-{i}) 子集减。复杂度为 (O(nm + n 2^n))。(事后知道出题人的复杂度为 (O(nm + n^2 2^n))

    口胡切了俩题感觉比较猖狂,开开 T4 立马让我冷静下来。T4 考了个通信题???并且部分分感人,满分范围 (n le 70),第一档范围 (n le 65)???不过 (n le 65) 的记录括号序还是很好想的,很快就想到了。看到有 (m le 1000) 的部分分,感觉会不会有单次预处理比较多的东西的方法,比如用树哈希给每棵树标个号?但是考虑到枚举所有的数太难了,就放弃了。

    开始写。上来把 T4 的 20 写了,没咋调就过了 20。然后写最好写的 T3 写了,调我半年/kk 怕爆 long long 开 unsigned long long,结果发现答案出现了超级大数?以为是 ull 的原因,改成 ll 以后还是有负数。最后眼调代码发现我的 FWT 又双叒叕写错了,写成了 j += (1 << i),真棒,FWT 三行代码已经出过五六种不同的错了!

    T3 PP 后写 T2。觉得要写很久,结果一百行写完了。也调了一阵子,但是比预期要短。然而等待 pretest 的时候又发现个错,结果错误代码 pp 了???有点害怕。

    还有一个多小时,再看眼 T1,试图想出 T1,毕竟现在就这题有拿分空间了。突然想到可以二分求下一个点,然后是个后缀前 (k) 小的问题了。不难想到 (O(nlog ^3 n)) 的做法,但是调的死去活来,出了各种错。幸亏出题人给了个强大样例,要不然我就直接当场自闭了。最后还是 PP 了。

    写完前三题,感觉“人生圆满”了,觉得这回 THUSC 较往年偏简单。最后二十分钟,再看看 T4 吧,能多拿点是一点。试了试 (n=65) 的极限数据,发现它 T 了,发现 unsigned int128 写成了 int128,改成 unsigned int128以后还是不行,发现可能出现 int128 >> 128 的 UB 情况,改掉就能过手造数据了,结果 pretest 过了80???这 pretest 也太水了吧 /kk,但是已经一点时间没有了。

    Day1 估分 320,还是挺不错的,但是这 pretest 强度有点吓人。

    zzz Day1 AK 了,强强。

    Day2

    4h 工程题。

    赛前莫名紧张。

    上来看了半个小时 guide ,发现旁边已经有人开始敲了,慌得不行。看了两眼 task1,感觉和 guide 偏差有点大,就先写 task1 了。读了半天题才读懂,可是不知道怎么按字节输出。看了眼密码条,上面写着“本OJ使用标准输入输出,不需要进行任何文件操作”,但是怎么标准输入输出也不行。根本没法调试,全用黑盒藏起来了样例输出。想看两眼“样例程序”,可是一直找不着,最后过了两个小时问了监考老师才找着。我差点崩溃了。发现里面出现了 fread,于是联想到了 fprintf 和 fwrite,可是不知道 fwrite 和 fprintf 怎么写。桌面上有英文版的 cppreference,可是我一般用的是 cplusplusreference,并且这个 cppreference 没有搜索功能,不知道 fwrite 在哪里,找了半天 c++ input/output,从底部小字里发现了 fopen 的连接,才得救。时间过去了大半,可我才做出来了一道题。

    task2 好像需要看 guide 了。从提供的文件中翻到了如何求射线和平面的交,以及如何判断点是否在三角形内部。然后开始手推方程,大概知道怎么写了,想翻翻有没有提供向量之类的结构体,能不能支持点乘之类的操作,结果翻到了平面的构造函数,射线和平面求交的函数,以及三角形构造函数,三角形面积函数。然后发现我其实什么都不用做,就只用调用几个函数就好了。结果一共写了五行代码,然后 segmentation fault 了,并且根本没办法调。调了一个小时以后才发现我 *NULL 了。调出来以后就只剩半个小时了,看看下一题分数有90分(50 + 40),比前两个题的总分都高,估计是没戏了。

    最后拿了 60 走人了。感觉失误太大,别人应该至少人均 150 吧。不知道我为啥总是 Day2 不理想。

    zzz 也只有110,出来后发现大家(HE)其实也都是 60 分。但是别的省好像好些,初二的 zjx 拿了 150,是神仙.

    下午讲题。Day2是lzj出的,快骂快骂(bugan)。虽然 Day2 考得很炸,但是 Day1 还不错,还是拿到奖了。

    这题比赛比起初二那次要好很多了,那次一堆失误,只拿了三等奖,这次结果要好些。

    运气好而已

  • 相关阅读:
    前端面试题
    【429】关于ADT的访问权限
    【428】Dijkstra 算法
    【427】Graph 实现 以及 DFS & BFS
    【426】C 传递数组给函数
    【425】堆排序方法(二叉堆)优先队列(PQ)
    Hadoop案例(九)流量汇总案例
    Hadoop案例(八)辅助排序和二次排序案例(GroupingComparator)
    Hadoop案例(七)MapReduce中多表合并
    Hadoop案例(六)小文件处理(自定义InputFormat)
  • 原文地址:https://www.cnblogs.com/JiaZP/p/14774585.html
Copyright © 2020-2023  润新知