mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
core: fix acm lock stat (#547)
This commit is contained in:
1 parent
9bd2c37735
commit
e1838a2493
1 file changed
+13
-15
@@ -58,7 +58,7 @@ const acm = buildContestRule({
|
||||
stat(tdoc, journal: AcmJournal[]) {
|
||||
const naccept = Counter<number>();
|
||||
const npending = Counter<number>();
|
||||
const display: Record<number, AcmJournal> = {};
|
||||
const display: Record<number, AcmDetail> = {};
|
||||
const detail: Record<number, AcmDetail> = {};
|
||||
let accept = 0;
|
||||
let time = 0;
|
||||
@@ -66,24 +66,22 @@ const acm = buildContestRule({
|
||||
const lockAt = isLocked(tdoc) ? tdoc.lockAt : null;
|
||||
for (const j of journal) {
|
||||
if (!this.submitAfterAccept && display[j.pid]?.status === STATUS.STATUS_ACCEPTED) continue;
|
||||
if (lockAt && j.rid.getTimestamp() > lockAt) {
|
||||
npending[j.pid]++;
|
||||
continue;
|
||||
}
|
||||
display[j.pid] = j;
|
||||
const real = Math.floor((j.rid.getTimestamp().getTime() - tdoc.beginAt.getTime()) / 1000);
|
||||
const penalty = 20 * 60 * naccept[j.pid];
|
||||
detail[j.pid] = {
|
||||
...j, naccept: naccept[j.pid], time: real + penalty, real, penalty,
|
||||
};
|
||||
if (![STATUS.STATUS_ACCEPTED, STATUS.STATUS_COMPILE_ERROR, STATUS.STATUS_FORMAT_ERROR].includes(j.status)) {
|
||||
naccept[j.pid]++;
|
||||
}
|
||||
if (lockAt && j.rid.getTimestamp() > lockAt) {
|
||||
npending[j.pid]++;
|
||||
display[j.pid].npending = npending[j.pid];
|
||||
continue;
|
||||
}
|
||||
display[j.pid] = detail[j.pid];
|
||||
}
|
||||
for (const pid in display) {
|
||||
const j = display[pid];
|
||||
const real = Math.floor((j.rid.getTimestamp().getTime() - tdoc.beginAt.getTime()) / 1000);
|
||||
const penalty = 20 * 60 * naccept[j.pid];
|
||||
detail[pid] = {
|
||||
...j, naccept: naccept[j.pid], time: real + penalty, real, penalty, npending: npending[j.pid],
|
||||
};
|
||||
}
|
||||
for (const d of Object.values(detail).filter((i) => i.status === STATUS.STATUS_ACCEPTED)) {
|
||||
for (const d of Object.values(display).filter((i) => i.status === STATUS.STATUS_ACCEPTED)) {
|
||||
accept++;
|
||||
time += d.time;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user