reach A-Class lowest line
This commit is contained in:
300000
data/17.in
Normal file
300000
data/17.in
Normal file
File diff suppressed because it is too large
Load Diff
303638
data/17.out
Normal file
303638
data/17.out
Normal file
File diff suppressed because it is too large
Load Diff
52
src/main.cpp
52
src/main.cpp
@ -178,7 +178,14 @@ struct RawTeamDataType {
|
|||||||
int id;
|
int id;
|
||||||
int rank;
|
int rank;
|
||||||
int name_rank;
|
int name_rank;
|
||||||
std::multiset<int, std::greater<int>> pass_time_before_freeze;
|
// std::multiset<int, std::greater<int>> pass_time_before_freeze;
|
||||||
|
int pass_time_before_freeze[27] = {kIntInf, kIntInf, kIntInf, kIntInf,
|
||||||
|
kIntInf, kIntInf, kIntInf, kIntInf,
|
||||||
|
kIntInf, kIntInf, kIntInf, kIntInf,
|
||||||
|
kIntInf, kIntInf, kIntInf, kIntInf,
|
||||||
|
kIntInf, kIntInf, kIntInf, kIntInf,
|
||||||
|
kIntInf, kIntInf, kIntInf, kIntInf,
|
||||||
|
kIntInf, kIntInf, kIntInf};
|
||||||
int query_status_index[4], query_problem_index[26],
|
int query_status_index[4], query_problem_index[26],
|
||||||
query_problem_status_index[26][4];
|
query_problem_status_index[26][4];
|
||||||
// as index in submissions are 0 based, so we use -1 to indicate that the team
|
// as index in submissions are 0 based, so we use -1 to indicate that the team
|
||||||
@ -225,12 +232,13 @@ inline bool operator<(const ScoreBoredElementType &a,
|
|||||||
// }
|
// }
|
||||||
auto &TDA = team_data[a.tid];
|
auto &TDA = team_data[a.tid];
|
||||||
auto &TDB = team_data[b.tid];
|
auto &TDB = team_data[b.tid];
|
||||||
auto itae = TDA.pass_time_before_freeze.end();
|
auto &ta = TDA.pass_time_before_freeze;
|
||||||
auto itbe = TDB.pass_time_before_freeze.end();
|
auto &tb = TDB.pass_time_before_freeze;
|
||||||
for (auto ita = TDA.pass_time_before_freeze.begin(),
|
int p = 0;
|
||||||
itb = TDB.pass_time_before_freeze.begin();
|
if (ta[p + 16] == kIntInf) p += 17;
|
||||||
ita != itae; ++ita, ++itb) {
|
if (ta[p + 8] == kIntInf) p += 9;
|
||||||
if (*ita != *itb) return *ita < *itb;
|
for (; p < 27; p++) {
|
||||||
|
if (ta[p] ^ tb[p]) return ta[p] < tb[p];
|
||||||
}
|
}
|
||||||
return TDA.name_rank < TDB.name_rank;
|
return TDA.name_rank < TDB.name_rank;
|
||||||
}
|
}
|
||||||
@ -400,9 +408,19 @@ void FlushScoreBoard(bool show_info = true, bool rebuild = true) {
|
|||||||
#endif
|
#endif
|
||||||
score_board.erase(value_in_score_board[tid]);
|
score_board.erase(value_in_score_board[tid]);
|
||||||
// team_data[tid].pass_time_before_freeze=team_data[tid].pass_time_before_freeze_new;
|
// team_data[tid].pass_time_before_freeze=team_data[tid].pass_time_before_freeze_new;
|
||||||
for (int j : new_problems_accepted)
|
for (int j : new_problems_accepted) {
|
||||||
team_data[tid].pass_time_before_freeze.insert(
|
auto &pass_time_before_freeze = team_data[tid].pass_time_before_freeze;
|
||||||
team_data[tid].first_pass_time[j]);
|
int p = 0;
|
||||||
|
int v = team_data[tid].first_pass_time[j];
|
||||||
|
for (; p < 26; p++) {
|
||||||
|
if (pass_time_before_freeze[p + 1] <= v) {
|
||||||
|
pass_time_before_freeze[p] = v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pass_time_before_freeze[p] = pass_time_before_freeze[p + 1];
|
||||||
|
}
|
||||||
|
if (p == 26) pass_time_before_freeze[26] = v;
|
||||||
|
}
|
||||||
score_board.insert(ScoreBoredElementType(tid, score, penalty));
|
score_board.insert(ScoreBoredElementType(tid, score, penalty));
|
||||||
value_in_score_board[tid] = ScoreBoredElementType(tid, score, penalty);
|
value_in_score_board[tid] = ScoreBoredElementType(tid, score, penalty);
|
||||||
teams_not_latest[tid] = false;
|
teams_not_latest[tid] = false;
|
||||||
@ -510,8 +528,18 @@ void ScrollScoreBoard() {
|
|||||||
score_board.erase(it);
|
score_board.erase(it);
|
||||||
// team_data[it->tid].pass_time_before_freeze=team_data[it->tid].pass_time_before_freeze_new;
|
// team_data[it->tid].pass_time_before_freeze=team_data[it->tid].pass_time_before_freeze_new;
|
||||||
team_data[tid].acceptence_tracked[i] = true;
|
team_data[tid].acceptence_tracked[i] = true;
|
||||||
team_data[tid].pass_time_before_freeze.insert(
|
auto &pass_time_before_freeze =
|
||||||
team_data[tid].first_pass_time[i]);
|
team_data[tid].pass_time_before_freeze;
|
||||||
|
int p = 0;
|
||||||
|
int v = team_data[tid].first_pass_time[i];
|
||||||
|
for (; p < 26; p++) {
|
||||||
|
if (pass_time_before_freeze[p + 1] <= v) {
|
||||||
|
pass_time_before_freeze[p] = v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pass_time_before_freeze[p] = pass_time_before_freeze[p + 1];
|
||||||
|
}
|
||||||
|
if (p == 26) pass_time_before_freeze[26] = v;
|
||||||
score_board.insert(ScoreBoredElementType(tid, score, penalty));
|
score_board.insert(ScoreBoredElementType(tid, score, penalty));
|
||||||
value_in_score_board[tid] =
|
value_in_score_board[tid] =
|
||||||
ScoreBoredElementType(tid, score, penalty);
|
ScoreBoredElementType(tid, score, penalty);
|
||||||
|
Reference in New Issue
Block a user