修复比赛AC助手首AC未显示
This commit is contained in:
parent
601efe9c9d
commit
2f5db36427
|
@ -35,7 +35,7 @@ int main(int argc, char *args[]){
|
||||||
ouf: 选手输出流
|
ouf: 选手输出流
|
||||||
ans: 标准答案流
|
ans: 标准答案流
|
||||||
**/
|
**/
|
||||||
registerTestlibCmd(argc, argv);
|
registerTestlibCmd(argc, args);
|
||||||
double pans = ouf.readDouble();
|
double pans = ouf.readDouble();
|
||||||
double jans = ans.readDouble();
|
double jans = ans.readDouble();
|
||||||
if (fabs(pans - jans)<0.01)
|
if (fabs(pans - jans)<0.01)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package top.hcode.hoj.dao;
|
package top.hcode.hoj.dao;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
@ -21,7 +20,7 @@ import java.util.List;
|
||||||
@Mapper
|
@Mapper
|
||||||
@Repository
|
@Repository
|
||||||
public interface ContestRecordMapper extends BaseMapper<ContestRecord> {
|
public interface ContestRecordMapper extends BaseMapper<ContestRecord> {
|
||||||
List<ContestRecord> getACInfo(IPage iPage, @Param("status") Integer status, @Param("cid") Long cid);
|
List<ContestRecord> getACInfo(@Param("status") Integer status, @Param("cid") Long cid);
|
||||||
|
|
||||||
List<ContestRecord> getOIContestRecord(@Param("cid") Long cid, @Param("contestAuthor") String contestAuthor,
|
List<ContestRecord> getOIContestRecord(@Param("cid") Long cid, @Param("contestAuthor") String contestAuthor,
|
||||||
@Param("isOpenSealRank") Boolean isOpenSealRank,
|
@Param("isOpenSealRank") Boolean isOpenSealRank,
|
||||||
|
|
|
@ -4,11 +4,10 @@
|
||||||
|
|
||||||
<select id="getACInfo" resultType="top.hcode.hoj.pojo.entity.ContestRecord">
|
<select id="getACInfo" resultType="top.hcode.hoj.pojo.entity.ContestRecord">
|
||||||
SELECT c.id,c.uid,c.username,c.display_id,c.cid,c.realname,c.pid,c.time,c.status,c.checked,c.submit_id,
|
SELECT c.id,c.uid,c.username,c.display_id,c.cid,c.realname,c.pid,c.time,c.status,c.checked,c.submit_id,
|
||||||
c.submit_time,c.first_blood FROM contest_record c,
|
c.submit_time FROM contest_record c,
|
||||||
(SELECT status,uid,pid,cpid,
|
(SELECT status,uid,pid,cpid,
|
||||||
MIN(submit_id) AS min_submit_id,
|
MIN(submit_id) AS min_submit_id,
|
||||||
MIN(submit_time) AS min_submit_time,
|
MIN(submit_time) AS min_submit_time
|
||||||
MAX(first_blood) AS max_first_blood
|
|
||||||
FROM contest_record GROUP BY status,uid,pid,cpid
|
FROM contest_record GROUP BY status,uid,pid,cpid
|
||||||
) AS t
|
) AS t
|
||||||
<where>
|
<where>
|
||||||
|
@ -16,7 +15,6 @@
|
||||||
AND t.cpid=c.cpid
|
AND t.cpid=c.cpid
|
||||||
AND t.min_submit_id=c.submit_id
|
AND t.min_submit_id=c.submit_id
|
||||||
AND t.min_submit_time=c.submit_time
|
AND t.min_submit_time=c.submit_time
|
||||||
AND t.max_first_blood=c.first_blood
|
|
||||||
<if test="status!=null">
|
<if test="status!=null">
|
||||||
AND c.status=#{status}
|
AND c.status=#{status}
|
||||||
</if>
|
</if>
|
||||||
|
|
|
@ -39,8 +39,52 @@ public class ContestRecordServiceImpl extends ServiceImpl<ContestRecordMapper, C
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<ContestRecord> getACInfo(Integer currentPage, Integer limit, Integer status, Long cid) {
|
public IPage<ContestRecord> getACInfo(Integer currentPage, Integer limit, Integer status, Long cid) {
|
||||||
|
|
||||||
|
List<ContestRecord> acInfo = contestRecordMapper.getACInfo(status, cid);
|
||||||
|
|
||||||
|
HashMap<Long, Integer> pidMapIndex = new HashMap<>(20);
|
||||||
|
HashMap<Integer, Long> indexMapTime = new HashMap<>(20);
|
||||||
|
|
||||||
|
for (int i = 0; i < acInfo.size(); i++) {
|
||||||
|
ContestRecord contestRecord = acInfo.get(i);
|
||||||
|
contestRecord.setFirstBlood(false);
|
||||||
|
Integer index = pidMapIndex.get(contestRecord.getPid());
|
||||||
|
if (index == null) {
|
||||||
|
pidMapIndex.put(contestRecord.getPid(), i);
|
||||||
|
indexMapTime.put(i, contestRecord.getTime());
|
||||||
|
} else {
|
||||||
|
Long firstTime = indexMapTime.get(index);
|
||||||
|
Long tmpTime = contestRecord.getTime();
|
||||||
|
if (tmpTime < firstTime) {
|
||||||
|
pidMapIndex.put(contestRecord.getPid(), i);
|
||||||
|
indexMapTime.put(i, tmpTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<ContestRecord> pageList = new ArrayList<>();
|
||||||
|
|
||||||
|
int count = acInfo.size();
|
||||||
|
|
||||||
|
//计算当前页第一条数据的下标
|
||||||
|
int currId = currentPage > 1 ? (currentPage - 1) * limit : 0;
|
||||||
|
for (int i = 0; i < limit && i < count - currId; i++) {
|
||||||
|
ContestRecord contestRecord = acInfo.get(currId + i);
|
||||||
|
if (pidMapIndex.get(contestRecord.getPid()) == currId + i){
|
||||||
|
contestRecord.setFirstBlood(true);
|
||||||
|
}
|
||||||
|
pageList.add(contestRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Page<ContestRecord> page = new Page<>(currentPage, limit);
|
Page<ContestRecord> page = new Page<>(currentPage, limit);
|
||||||
return page.setRecords(contestRecordMapper.getACInfo(page, status, cid));
|
page.setSize(limit);
|
||||||
|
page.setCurrent(currentPage);
|
||||||
|
page.setTotal(count);
|
||||||
|
page.setRecords(pageList);
|
||||||
|
|
||||||
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -66,8 +110,6 @@ public class ContestRecordServiceImpl extends ServiceImpl<ContestRecordMapper, C
|
||||||
page.setSize(limit);
|
page.setSize(limit);
|
||||||
page.setCurrent(currentPage);
|
page.setCurrent(currentPage);
|
||||||
page.setTotal(count);
|
page.setTotal(count);
|
||||||
//计算分页总页数
|
|
||||||
page.setPages(count % 10 == 0 ? count / 10 : count / 10 + 1);
|
|
||||||
page.setRecords(pageList);
|
page.setRecords(pageList);
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
|
@ -95,8 +137,6 @@ public class ContestRecordServiceImpl extends ServiceImpl<ContestRecordMapper, C
|
||||||
page.setSize(limit);
|
page.setSize(limit);
|
||||||
page.setCurrent(currentPage);
|
page.setCurrent(currentPage);
|
||||||
page.setTotal(count);
|
page.setTotal(count);
|
||||||
//计算分页总页数
|
|
||||||
page.setPages(count % 10 == 0 ? count / 10 : count / 10 + 1);
|
|
||||||
page.setRecords(pageList);
|
page.setRecords(pageList);
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
|
@ -286,7 +326,7 @@ public class ContestRecordServiceImpl extends ServiceImpl<ContestRecordMapper, C
|
||||||
// 根据总得分进行降序,再根据总时耗升序排序
|
// 根据总得分进行降序,再根据总时耗升序排序
|
||||||
List<OIContestRankVo> orderResultList = result.stream()
|
List<OIContestRankVo> orderResultList = result.stream()
|
||||||
.sorted(Comparator.comparing(OIContestRankVo::getTotalScore, Comparator.reverseOrder())
|
.sorted(Comparator.comparing(OIContestRankVo::getTotalScore, Comparator.reverseOrder())
|
||||||
.thenComparing(OIContestRankVo::getTotalTime,Comparator.naturalOrder()))
|
.thenComparing(OIContestRankVo::getTotalTime, Comparator.naturalOrder()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
return orderResultList;
|
return orderResultList;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue