mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 00:13:18 +00:00
修复OI模式下测试点全部错误结果也是部分错误
This commit is contained in:
parent
35f6c9c4a7
commit
e0369e6865
@ -100,16 +100,17 @@ class JudgeDispatcher(object):
|
|||||||
self.submission_obj.info = resp
|
self.submission_obj.info = resp
|
||||||
if resp["err"]:
|
if resp["err"]:
|
||||||
self.submission_obj.result = JudgeStatus.COMPILE_ERROR
|
self.submission_obj.result = JudgeStatus.COMPILE_ERROR
|
||||||
|
self.submission_obj.statistic_info["err_info"] = resp["data"]
|
||||||
else:
|
else:
|
||||||
# 用时和内存占用保存为多个测试点中最长的那个
|
# 用时和内存占用保存为多个测试点中最长的那个
|
||||||
self.submission_obj.statistic_info["time_cost"] = max([x["cpu_time"] for x in resp["data"]])
|
self.submission_obj.statistic_info["time_cost"] = max([x["cpu_time"] for x in resp["data"]])
|
||||||
self.submission_obj.statistic_info["memory_cost"] = max([x["memory"] for x in resp["data"]])
|
self.submission_obj.statistic_info["memory_cost"] = max([x["memory"] for x in resp["data"]])
|
||||||
|
|
||||||
error_test_case = list(filter(lambda case: case["result"] != 0, resp["data"]))
|
error_test_case = list(filter(lambda case: case["result"] != 0, resp["data"]))
|
||||||
# 多个测试点全部正确AC,否则 ACM模式下取第一个错误的测试点状态, OI模式对应为部分正确
|
# 多个测试点全部正确则AC,否则 ACM模式下取第一个错误的测试点的状态, OI模式若全部错误则取第一个错误测试点状态,否则为部分正确
|
||||||
if not error_test_case:
|
if not error_test_case:
|
||||||
self.submission_obj.result = JudgeStatus.ACCEPTED
|
self.submission_obj.result = JudgeStatus.ACCEPTED
|
||||||
elif self.problem_obj.rule_type == ProblemRuleType.ACM:
|
elif self.problem_obj.rule_type == ProblemRuleType.ACM or len(error_test_case) == len(resp["data"]):
|
||||||
self.submission_obj.result = error_test_case[0]["result"]
|
self.submission_obj.result = error_test_case[0]["result"]
|
||||||
else:
|
else:
|
||||||
self.submission_obj.result = JudgeStatus.PARTIALLY_ACCEPTED
|
self.submission_obj.result = JudgeStatus.PARTIALLY_ACCEPTED
|
||||||
|
@ -25,7 +25,7 @@ class SubmissionSafeSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Submission
|
model = Submission
|
||||||
exclude = ('info', 'contest_id')
|
exclude = ("info", "contest_id")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_username(obj):
|
def get_username(obj):
|
||||||
@ -38,14 +38,16 @@ class SubmissionListSerializer(SubmissionSafeSerializer):
|
|||||||
show_link = serializers.SerializerMethodField()
|
show_link = serializers.SerializerMethodField()
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.user = kwargs.pop('user', None)
|
self.user = kwargs.pop("user", None)
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Submission
|
model = Submission
|
||||||
exclude = ('info', 'contest_id', 'code')
|
exclude = ("info", "contest_id", "code")
|
||||||
|
|
||||||
def get_show_link(self, obj):
|
def get_show_link(self, obj):
|
||||||
|
if self.user.id is None:
|
||||||
|
return False
|
||||||
return obj.check_user_permission(self.user)
|
return obj.check_user_permission(self.user)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -12,7 +12,6 @@ from ..serializers import CreateSubmissionSerializer, SubmissionModelSerializer
|
|||||||
from ..serializers import SubmissionSafeSerializer, SubmissionListSerializer
|
from ..serializers import SubmissionSafeSerializer, SubmissionListSerializer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _submit(response, user, problem_id, language, code, contest_id=None):
|
def _submit(response, user, problem_id, language, code, contest_id=None):
|
||||||
# TODO: 预设默认值,需修改
|
# TODO: 预设默认值,需修改
|
||||||
controller = BucketController(user_id=user.id,
|
controller = BucketController(user_id=user.id,
|
||||||
@ -83,7 +82,7 @@ class SubmissionListAPI(APIView):
|
|||||||
if problem_id:
|
if problem_id:
|
||||||
subs = subs.filter(problem_id=problem_id)
|
subs = subs.filter(problem_id=problem_id)
|
||||||
|
|
||||||
if request.GET.get("myself"):
|
if request.GET.get("myself") and request.GET["myself"] == "1":
|
||||||
subs = subs.filter(user_id=request.user.id)
|
subs = subs.filter(user_id=request.user.id)
|
||||||
# todo: paginate
|
# todo: paginate
|
||||||
return self.success(SubmissionListSerializer(subs, many=True, user=request.user).data)
|
return self.success(SubmissionListSerializer(subs, many=True, user=request.user).data)
|
||||||
|
Loading…
Reference in New Issue
Block a user