创新实训 (六)题目统计信息

对于每一道题目,设置一个统计题目提交数据的页面,可以根据这个页面,来分析题目的情况。

首先对题号进行判断,如果该题目的编号超过了范围,就会显示 404 页面。

如果这是某个比赛的题目的页面,我们会根据用户的权限、题目的隐藏与否等决定是否用户可以查看该页面。

如果这是一道比赛中的题目,且比赛还没有结束,那么统计数据也无法查看。

首先,我们计划展示所有的 AC 代码,我们使用两个指标评价代码,一个指标是代码的长度,另一个指标是代码的速度。如果每次我们都使用 sql 去查询一遍所有的提交数据,那么效率比较低,所以我们维护一个 best_ac_submissions 数据库,这个数据库如下:

其主键为每一个题目和每一个用户,会记录该用户在这道题目下的最优秀的提交,注意这里的最优的定义是时间最短;对于代码长度的指标,我们额外在数据库中记录最短代码有关的信息。
这一数据库相当于对于用户一道题目的不同 AC 记录进行了去重,还可以用于统计 AC 数和 AC 题目信息。

当有新的提交时,也需要调用相关方法,来更新这一数据库:

之后我们根据最优还是最短的信息,去使用不同的查询方法。


之后我们生成一张得分分布图,先对得分分布进行统计:


这里要记录是否存在 0 分 和 100 分的情况,无论何时都要在柱状图上体现这两个数字。

使用 Morris 绘制柱状图。


之后在分布数据的基础上统计前缀和后缀信息,也是用 Morris 绘制折线图:

posted @ 2024-06-23 22:26  asuldb  阅读(4)  评论(0编辑  收藏  举报