optmize name compare

This commit is contained in:
2023-10-14 12:50:51 +08:00
parent bdb80ad3bd
commit c8b040391c

View File

@ -174,6 +174,7 @@ struct RawTeamDataType {
std::string name; std::string name;
int id; int id;
int rank; int 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 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];
@ -224,7 +225,7 @@ inline bool operator<(const ScoreBoredElementType &a,
++ita, ++itb) { ++ita, ++itb) {
if (*ita != *itb) return *ita < *itb; if (*ita != *itb) return *ita < *itb;
} }
return team_data[a.tid].name < team_data[b.tid].name; return team_data[a.tid].name_rank < team_data[b.tid].name_rank;
} }
std::set<ScoreBoredElementType> score_board; std::set<ScoreBoredElementType> score_board;
/** /**
@ -265,6 +266,14 @@ void StartCompetition(int duration_time, int problem_count) {
competition_duration_time = duration_time; competition_duration_time = duration_time;
total_number_of_problems = problem_count; total_number_of_problems = problem_count;
competition_status = kNormalRunning; competition_status = kNormalRunning;
/*init the name_rank*/
std::vector<std::pair<std::string, int>> name_rank;
name_rank.reserve(team_number);
for (int i = 1; i <= team_number; i++)
name_rank.push_back(std::make_pair(team_data[i].name, i));
std::sort(name_rank.begin(), name_rank.end());
for (int i = 0; i < team_number; i++)
team_data[name_rank[i].second].name_rank = i;
/*init the score board*/ /*init the score board*/
for (int i = 1; i <= team_number; i++) { for (int i = 1; i <= team_number; i++) {
score_board.insert(ScoreBoredElementType(i, 0, 0)); score_board.insert(ScoreBoredElementType(i, 0, 0));
@ -322,6 +331,7 @@ inline void Submit(char problem_name, char *team_name,
} }
} }
void FlushScoreBoard(bool show_info = true, bool rebuild = true) { void FlushScoreBoard(bool show_info = true, bool rebuild = true) {
// rebuild=false;
if (rebuild) { if (rebuild) {
score_board.clear(); score_board.clear();
for (int i = 1; i <= team_number; i++) { for (int i = 1; i <= team_number; i++) {
@ -379,6 +389,7 @@ void PrintScoreBoard() {
} }
} }
void CheckDataAfterScroll() { void CheckDataAfterScroll() {
// return;
for (int i = 1; i <= team_number; i++) for (int i = 1; i <= team_number; i++)
for (int j = 0; j < total_number_of_problems; j++) for (int j = 0; j < total_number_of_problems; j++)
if (team_data[i].is_frozen[j]) throw "has frozen problem after scroll!"; if (team_data[i].is_frozen[j]) throw "has frozen problem after scroll!";