## Tips

update: 2020春本课程已课改，内容改为数据库的基础知识（与数据库系统概论有不少重合）。2020年作业见https://github.com/RecursionSheep/Database-Training-Projects

我觉得lcgg的代码写的太菜了，就把它删了。我的在这里：

https://github.com/Trinkle23897/Personal-Homework/tree/master/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%93%E9%A2%98%E8%AE%AD%E7%BB%83

一共三次作业，占比30/30/40，还似乎年年都一样。前两次按照时间升序排名，用时越短分越高。我前两次的排名都是全班第二（orz zl）。第三次是“前端大作业”，算法都不用自己写，就只需要调库……把前端写好了就能拿高分。

我第一次最后跑了4.8s，第二次最后跑了1.5s。不过在写第一个的时候，推荐先看看我第二个的实现，里面有一些trick是我后面才想到的，没有用于第一次作业。



这门课拿高分（flag）有一些技巧

1. **Rejudge**：评测机不稳定，越早开始写越好，因为交的人少；如果迟了的话，只能rejudge，反正他是取历史最好成绩。夸张一点，第一次交上去40s，rejudge一下变18s。感觉时间的分布是个正态分布，这就意味着你rejudge越多次，你排名越前。某次我写了个15s的交上去，洗了个澡发现rejudge成了11s。你甚至可以在睡觉的时候，在服务器上跑这个脚本（脚本在根目录下
2. baseline要好：我第一次拿lcgg的改，发现突破不了upper bound。第二次拿一个7s的改，思路和lcgg的完全不一样，upper bound直接甩了lcgg的代码几条街…
3. 第一次作业只算运行时间，不算初始化，因此你可以把初始化随便写，一些特别耗时间的操作都放到初始化里面。此外，第一次作业往年有学长跑到2s，而且是包括初始化的那种，我膝盖没了。大概就是overfit数据，比如输入字符串长度大于某个threshold的时候把ED/JC的threshold也变一变，虽然这么做肯定是错的，正确性没有保证，但是在这个数据集上却能够work，我也是很无语。

