diff --git a/contest/migrations/0007_contestsubmission_ac_time.py b/contest/migrations/0007_contestsubmission_ac_time.py new file mode 100644 index 0000000..d7bc904 --- /dev/null +++ b/contest/migrations/0007_contestsubmission_ac_time.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('contest', '0006_merge'), + ] + + operations = [ + migrations.AddField( + model_name='contestsubmission', + name='ac_time', + field=models.IntegerField(default=0), + ), + ] diff --git a/contest/models.py b/contest/models.py index 338e3b1..be80f9e 100644 --- a/contest/models.py +++ b/contest/models.py @@ -84,6 +84,8 @@ class ContestSubmission(models.Model): total_submission_number = models.IntegerField(default=1) # 这道题是 AC 还是没过 ac = models.BooleanField() + # ac 用时 + ac_time = models.IntegerField(default=0) # 总的时间,用于acm 类型的,也需要保存罚时 total_time = models.IntegerField(default=0) diff --git a/contest/views.py b/contest/views.py index e68b81f..d897b4d 100644 --- a/contest/views.py +++ b/contest/views.py @@ -402,8 +402,8 @@ def _cmp(x, y): def contest_rank_page(request, contest_id): contest = Contest.objects.get(id=contest_id) contest_problems = ContestProblem.objects.filter(contest=contest).order_by("sort_index") - result = ContestSubmission.objects.filter(contest=contest).values("user_id").annotate( - total_submit=Sum("total_submission_number")) + result = ContestSubmission.objects.filter(contest=contest).values("user_id").\ + annotate(total_submit=Sum("total_submission_number")) for i in range(0, len(result)): # 这个人所有的提交 submissions = ContestSubmission.objects.filter(user_id=result[i]["user_id"], contest_id=contest_id) diff --git a/mq/scripts/info.py b/mq/scripts/info.py index 119845c..a3e13b9 100644 --- a/mq/scripts/info.py +++ b/mq/scripts/info.py @@ -60,11 +60,12 @@ class MessageQueue(object): # 避免这道题已经 ac 了,但是又重新提交了一遍 if not contest_submission.ac: # 这种情况是这个题目前处于错误状态,就使用已经存储了的罚时加上这道题的实际用时 - logger.debug(contest.start_time) - logger.debug(submission.create_time) - logger.debug((submission.create_time - contest.start_time).total_seconds()) - logger.debug(int((submission.create_time - contest.start_time).total_seconds() / 60)) - contest_submission.total_time += int((submission.create_time - contest.start_time).total_seconds() / 60) + # logger.debug(contest.start_time) + # logger.debug(submission.create_time) + # logger.debug((submission.create_time - contest.start_time).total_seconds()) + # logger.debug(int((submission.create_time - contest.start_time).total_seconds() / 60)) + contest_submission.ac_time = int((submission.create_time - contest.start_time).total_seconds() / 60) + contest_submission.total_time += contest_submission.ac_time # 标记为已经通过 contest_submission.ac = True # contest problem ac 计数器加1 diff --git a/utils/templatetags/submission.py b/utils/templatetags/submission.py index b1f43d2..2e73417 100644 --- a/utils/templatetags/submission.py +++ b/utils/templatetags/submission.py @@ -33,8 +33,14 @@ def get_contest_submission_problem_detail(contest_problem, my_submission): if contest_problem.id in my_submission: submission = my_submission[contest_problem.id] if submission.ac: - return u"\n 时间: " + str(submission.total_time) + u" min" - return "" + # 只提交了一次就AC + if submission.total_submission_number == 1: + return str(submission.ac_time) + " min" + else: + return "20 min × " + str(submission.total_submission_number - 1) + " WA + " + str(submission.ac_time) + " min" + return str(submission.total_submission_number) + " WA" + else: + return "" def get_submission_problem_result_class(contest_problem, my_submission):