3 Star 11 Fork 2

BLumia / BLumiaOJ

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
contest_ranklist.php 3.48 KB
一键复制 编辑 原始数据 按行查看 历史
BLumia 提交于 2017-06-14 16:20 . contest ranklist improved
<?php
session_start();
//Vars & Functions
require_once('./include/setting_oj.inc.php');
require_once('./include/common_const.inc.php');
require_once('./include/contest_functions.inc.php');
require_once('./include/user_check_functions.php');
class Player {
var $solved=0;
var $time=0;
var $p_wa_num;
var $p_ac_sec;
var $user_id;
var $nick;
function __construct() {
$this->solved=0;
$this->time=0;
$this->p_wa_num=array(0);
$this->p_ac_sec=array(0);
}
function Add($pid,$sec,$res) {
if (isset($this->p_ac_sec[$pid])&&$this->p_ac_sec[$pid]>0)
return;
if ($res!=4){
if(isset($this->p_wa_num[$pid])) {
$this->p_wa_num[$pid]++;
}else{
$this->p_wa_num[$pid]=1;
}
} else {
$this->p_ac_sec[$pid]=$sec;
$this->solved++;
if(!isset($this->p_wa_num[$pid])) $this->p_wa_num[$pid]=0;
$this->time+=$sec+$this->p_wa_num[$pid]*1200;
}
}
}
function s_cmp($A,$B) {
if ($A->solved!=$B->solved) return $A->solved<$B->solved;
else return $A->time>$B->time;
}
//Prepares
$cid=isset($_GET['cid']) ? intval($_GET['cid']) : 0;
if ($cid==0) {
echo "No such contest";
exit(0);
}
$highlightID = isset($_REQUEST['user_id']) ? $_REQUEST['user_id'] : "";
$sql=$pdo->prepare("SELECT `start_time`,`title`,`end_time`,`password`,`private` FROM contest WHERE contest_id = ?");
$sql->execute(array($cid));
$contestItem = $sql->fetch(PDO::FETCH_ASSOC);
if ($contestItem) {
$start_time=strtotime($contestItem['start_time']); //尚未检查这些值是否正确
$end_time=strtotime($contestItem['end_time']);
$contest_title=$contestItem['title'];
} else {
echo "Content Not Exist";
exit(0);
}
if (!$OJ_LOCKRANK) $OJ_LOCKRANK_PERCENT = 0 ;
$lock_time=$end_time-($end_time-$start_time)*$OJ_LOCKRANK_PERCENT;
$sql=$pdo->prepare("SELECT count(1) AS probCnt FROM `contest_problem` WHERE `contest_id`=?");
$sql->execute(array($cid));
$problemItem=$sql->fetch(PDO::FETCH_ASSOC);
$problemCount=$problemItem['probCnt'];
$sql=$pdo->prepare("SELECT users.user_id,users.nick,solution.result,solution.num,solution.in_date
FROM (
SELECT * FROM solution WHERE solution.contest_id=? AND num>=0
) solution LEFT JOIN users ON users.user_id=solution.user_id
ORDER BY users.user_id,in_date");
$sql->execute(array($cid));
$playerList = $sql->fetchAll(PDO::FETCH_ASSOC);
//var_dump($playerList);
$playerCount = count($playerList);
$user_cnt=0;
$user_name='';
$playerArr=array();
for ($i=0;$i<$playerCount;$i++){
$onePlayer = $playerList[$i];
$n_user=$onePlayer['user_id'];
if (strcmp($user_name,$n_user)){
$user_cnt++;
$playerArr[$user_cnt]=new Player();
$playerArr[$user_cnt]->user_id=$onePlayer['user_id'];
$playerArr[$user_cnt]->nick=$onePlayer['nick'];
$user_name=$n_user;
}
if(time()<$end_time&&$lock_time<strtotime($onePlayer['in_date']))
$playerArr[$user_cnt]->Add($onePlayer['num'],strtotime($onePlayer['in_date'])-$start_time,0);
else
$playerArr[$user_cnt]->Add($onePlayer['num'],strtotime($onePlayer['in_date'])-$start_time,intval($onePlayer['result']));
}
usort($playerArr,"s_cmp");
$first_blood=array();
for($i=0;$i<$problemCount;$i++){
$sql=$pdo->prepare("SELECT user_id FROM solution WHERE contest_id=? AND result=4 AND num=? ORDER BY in_date LIMIT 1");
$sql->execute(array($cid,$i));
$fbResult = $sql->fetch(PDO::FETCH_ASSOC);
$fbResultCount=count($fbResult);
$first_blood[$i] = ($fbResultCount) ? $fbResult['user_id'] : "";
}
//Page Includes
require("./pages/contest_ranklist.php");
?>
PHP
1
https://gitee.com/blumia/BLumiaOJ.git
git@gitee.com:blumia/BLumiaOJ.git
blumia
BLumiaOJ
BLumiaOJ
master

搜索帮助