mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01: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[]) {
|
stat(tdoc, journal: AcmJournal[]) {
|
||||||
const naccept = Counter<number>();
|
const naccept = Counter<number>();
|
||||||
const npending = Counter<number>();
|
const npending = Counter<number>();
|
||||||
const display: Record<number, AcmJournal> = {};
|
const display: Record<number, AcmDetail> = {};
|
||||||
const detail: Record<number, AcmDetail> = {};
|
const detail: Record<number, AcmDetail> = {};
|
||||||
let accept = 0;
|
let accept = 0;
|
||||||
let time = 0;
|
let time = 0;
|
||||||
@@ -66,24 +66,22 @@ const acm = buildContestRule({
|
|||||||
const lockAt = isLocked(tdoc) ? tdoc.lockAt : null;
|
const lockAt = isLocked(tdoc) ? tdoc.lockAt : null;
|
||||||
for (const j of journal) {
|
for (const j of journal) {
|
||||||
if (!this.submitAfterAccept && display[j.pid]?.status === STATUS.STATUS_ACCEPTED) continue;
|
if (!this.submitAfterAccept && display[j.pid]?.status === STATUS.STATUS_ACCEPTED) continue;
|
||||||
if (lockAt && j.rid.getTimestamp() > lockAt) {
|
const real = Math.floor((j.rid.getTimestamp().getTime() - tdoc.beginAt.getTime()) / 1000);
|
||||||
npending[j.pid]++;
|
const penalty = 20 * 60 * naccept[j.pid];
|
||||||
continue;
|
detail[j.pid] = {
|
||||||
}
|
...j, naccept: naccept[j.pid], time: real + penalty, real, penalty,
|
||||||
display[j.pid] = j;
|
};
|
||||||
if (![STATUS.STATUS_ACCEPTED, STATUS.STATUS_COMPILE_ERROR, STATUS.STATUS_FORMAT_ERROR].includes(j.status)) {
|
if (![STATUS.STATUS_ACCEPTED, STATUS.STATUS_COMPILE_ERROR, STATUS.STATUS_FORMAT_ERROR].includes(j.status)) {
|
||||||
naccept[j.pid]++;
|
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) {
|
for (const d of Object.values(display).filter((i) => i.status === STATUS.STATUS_ACCEPTED)) {
|
||||||
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)) {
|
|
||||||
accept++;
|
accept++;
|
||||||
time += d.time;
|
time += d.time;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user