fix a bug of submit_status too short
This commit is contained in:
39
src/main.cpp
39
src/main.cpp
@ -110,6 +110,7 @@ template<typename A_t,typename B_t,typename C_t,typename D_t> inline void write(
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
static_assert(sizeof(int) == 4, "Expect int as a 32-bit integer.");
|
static_assert(sizeof(int) == 4, "Expect int as a 32-bit integer.");
|
||||||
static_assert(sizeof(long long) == 8, "Expect long long as a 64-bit integer.");
|
static_assert(sizeof(long long) == 8, "Expect long long as a 64-bit integer.");
|
||||||
|
const char *current_command; // only for debug
|
||||||
namespace ICPCManager {
|
namespace ICPCManager {
|
||||||
namespace BackEnd {
|
namespace BackEnd {
|
||||||
/**
|
/**
|
||||||
@ -184,6 +185,7 @@ struct RawTeamDataType {
|
|||||||
kIntInf, kIntInf, kIntInf, kIntInf, kIntInf,
|
kIntInf, kIntInf, kIntInf, kIntInf, kIntInf,
|
||||||
kIntInf};
|
kIntInf};
|
||||||
int try_times_before_pass[26] = {0};
|
int try_times_before_pass[26] = {0};
|
||||||
|
int submissions_during_block[26] = {0};
|
||||||
std::vector<SubmissionType> submissions;
|
std::vector<SubmissionType> submissions;
|
||||||
RawTeamDataType() { ; }
|
RawTeamDataType() { ; }
|
||||||
};
|
};
|
||||||
@ -276,6 +278,7 @@ inline void Submit(char problem_name, char *team_name,
|
|||||||
if (team_data[team_id].already_passed_before_block[problem_name - 'A'] == 0 &&
|
if (team_data[team_id].already_passed_before_block[problem_name - 'A'] == 0 &&
|
||||||
competition_status == kBlocked) {
|
competition_status == kBlocked) {
|
||||||
team_data[team_id].is_frozen[problem_name - 'A'] = true;
|
team_data[team_id].is_frozen[problem_name - 'A'] = true;
|
||||||
|
team_data[team_id].submissions_during_block[problem_name - 'A']++;
|
||||||
}
|
}
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case kAC: {
|
case kAC: {
|
||||||
@ -328,7 +331,19 @@ void FreezeScoreBoard() {
|
|||||||
write("[Info]Freeze scoreboard.\n");
|
write("[Info]Freeze scoreboard.\n");
|
||||||
}
|
}
|
||||||
void ScrollScoreBoard() { ; }
|
void ScrollScoreBoard() { ; }
|
||||||
void QueryRanking(char *team_name) { ; }
|
void QueryRanking(char *team_name) {
|
||||||
|
if (team_name_to_id.find(team_name) == team_name_to_id.end()) {
|
||||||
|
write("[Error]Query ranking failed: cannot find the team.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
write("[Info]Complete query ranking.\n");
|
||||||
|
if (competition_status == kBlocked)
|
||||||
|
write(
|
||||||
|
"[Warning]Scoreboard is frozen. The ranking may be inaccurate until it "
|
||||||
|
"were scrolled.\n");
|
||||||
|
write(team_name, " NOW AT RANKING ",
|
||||||
|
team_data[team_name_to_id[team_name]].rank, "\n");
|
||||||
|
}
|
||||||
void QuerySubmission(char *team_name, char *problem_name, char *submit_status) {
|
void QuerySubmission(char *team_name, char *problem_name, char *submit_status) {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
@ -363,6 +378,15 @@ inline void Submit(char problem_name, char *team_name, char *submit_status,
|
|||||||
int time) {
|
int time) {
|
||||||
if (BackEnd::competition_status == BackEnd::kNotStarted)
|
if (BackEnd::competition_status == BackEnd::kNotStarted)
|
||||||
throw "Competition hasn't started yet.";
|
throw "Competition hasn't started yet.";
|
||||||
|
if (ICPCManager::BackEnd::team_name_to_id.find(team_name) ==
|
||||||
|
ICPCManager::BackEnd::team_name_to_id.end()) {
|
||||||
|
char *str = new char[1000];
|
||||||
|
sprintf(str,
|
||||||
|
"Team not found when excuting SUBMIT %c BY %s WITH %s AT "
|
||||||
|
"%d\ncurrent command is [%s]\n",
|
||||||
|
problem_name, team_name, submit_status, time, current_command);
|
||||||
|
throw str;
|
||||||
|
}
|
||||||
BackEnd::Submit(problem_name, team_name, submit_status, time);
|
BackEnd::Submit(problem_name, team_name, submit_status, time);
|
||||||
}
|
}
|
||||||
inline void FlushScoreBoard() {
|
inline void FlushScoreBoard() {
|
||||||
@ -409,6 +433,7 @@ void EndContest() {
|
|||||||
*/
|
*/
|
||||||
inline void Excute(const char *const command) {
|
inline void Excute(const char *const command) {
|
||||||
char command_name[1024];
|
char command_name[1024];
|
||||||
|
current_command = command;
|
||||||
sscanf(command, "%s", command_name);
|
sscanf(command, "%s", command_name);
|
||||||
ICPCManager::BackEnd::CommandType command_type =
|
ICPCManager::BackEnd::CommandType command_type =
|
||||||
ICPCManager::BackEnd::CommandParser[command_name];
|
ICPCManager::BackEnd::CommandParser[command_name];
|
||||||
@ -428,13 +453,15 @@ inline void Excute(const char *const command) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ICPCManager::BackEnd::kSUBMIT: {
|
case ICPCManager::BackEnd::kSUBMIT: {
|
||||||
char problem_name;
|
char problem_name[10];
|
||||||
char team_name[100];
|
char team_name[100];
|
||||||
char submit_status[10];
|
char submit_status[20];
|
||||||
int time;
|
int time;
|
||||||
sscanf(command, "%*s%c%*s%s%*s%s%*s%d", &problem_name, team_name,
|
sscanf(command, "%*s%s%*s%s%*s%s%*s%d", problem_name, team_name,
|
||||||
submit_status, &time);
|
submit_status, &time);
|
||||||
ICPCManager::API::Submit(problem_name, team_name, submit_status, time);
|
fprintf(stderr,"command=%s\n",command);
|
||||||
|
fprintf(stderr,"tname=%s\n",team_name);
|
||||||
|
ICPCManager::API::Submit(problem_name[0], team_name, submit_status, time);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ICPCManager::BackEnd::kFLUSH: {
|
case ICPCManager::BackEnd::kFLUSH: {
|
||||||
@ -460,7 +487,7 @@ inline void Excute(const char *const command) {
|
|||||||
case ICPCManager::BackEnd::kQUERY_SUBMISSION: {
|
case ICPCManager::BackEnd::kQUERY_SUBMISSION: {
|
||||||
char team_name[100];
|
char team_name[100];
|
||||||
char problem_name[10];
|
char problem_name[10];
|
||||||
char status[10];
|
char status[20];
|
||||||
sscanf(command, "%*s%s%*s%*s%s%*s%*s%s", team_name, problem_name, status);
|
sscanf(command, "%*s%s%*s%*s%s%*s%*s%s", team_name, problem_name, status);
|
||||||
ICPCManager::API::QuerySubmission(team_name, problem_name, status);
|
ICPCManager::API::QuerySubmission(team_name, problem_name, status);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user