==== 소감 ==== {{| 2005/06/18 Accepted 0:00.000 64 |}} 푼 문제수와 Time 패널티가 모두 같은 때에는 팀 번호가 작은 순으로 출력해야된다. ==== 코드 ==== {{{~cpp #include using namespace std; #define nTeam 101 // 팀 수 #define nProblem 9 // 문제 번호 // Team 구조체 struct Team { int solvedProblem; // 푼 문제의 수 int timePenalty; // 시간 패널티 bool incorrectSubmit[nProblem]; bool correctSubmit[nProblem]; }; void init(Team *team); void InputInformation(Team *team, bool *joined); void RankTeam(Team *team, bool *joined); int main() { Team team[nTeam] = {{0, }, {0, }, {false, }, {false, }}; bool joined[nTeam] = {false, }; int nCase; int count = 0; cin >> nCase; cin.get(); cin.get(); while (count < nCase) { init(team); InputInformation(team, joined); RankTeam(team, joined); if (count < nCase-1) cout << endl; count++; } return 0; } void init(Team *team) { int i, j; for (i=1 ; i> teamNumber >> problemNumber >> timePenalty >> state; cin.get(); joined[teamNumber] = true; switch (state) { case 'I': team[teamNumber].incorrectSubmit[problemNumber] = true; break; case 'C': if (team[teamNumber].correctSubmit[problemNumber] == false) { team[teamNumber].solvedProblem++; team[teamNumber].timePenalty += timePenalty; if (team[teamNumber].incorrectSubmit[problemNumber] == true) team[teamNumber].timePenalty += 20; team[teamNumber].correctSubmit[problemNumber] = true; } break; } } } void RankTeam(Team *team, bool *joined) { int i; int bestTeam; int isBreak; while (1) { for (i=1 ; i team[bestTeam].solvedProblem) bestTeam = i; // 푼 문제수가 가장 많은 팀을 뽑는다 else if (team[i].solvedProblem == team[bestTeam].solvedProblem && team[i].timePenalty < team[bestTeam].timePenalty) bestTeam = i; else continue; } } cout << bestTeam << " " << team[bestTeam].solvedProblem << " " << team[bestTeam].timePenalty << endl; joined[bestTeam] = false; isBreak = 1; } } }}} ---- [ContestScoreBoard] [AOI]