More actions
imported>Unknown No edit summary |
(Table transclusion repair v1) |
||
| Line 1: | Line 1: | ||
==== 소감 ==== | ==== 소감 ==== | ||
2005/06/18 Accepted 0:00.000 64 | |||
푼 문제수와 Time 패널티가 모두 같은 때에는 팀 번호가 작은 순으로 출력해야된다. | 푼 문제수와 Time 패널티가 모두 같은 때에는 팀 번호가 작은 순으로 출력해야된다. | ||
| Line 16: | Line 16: | ||
int solvedProblem; // 푼 문제의 수 | int solvedProblem; // 푼 문제의 수 | ||
int timePenalty; // 시간 패널티 | int timePenalty; // 시간 패널티 | ||
bool incorrectSubmit | bool incorrectSubmit[nProblem]; | ||
bool correctSubmit | bool correctSubmit[nProblem]; | ||
}; | }; | ||
| Line 26: | Line 26: | ||
int main() | int main() | ||
{ | { | ||
Team team | Team team[nTeam] = {{0, }, {0, }, {false, }, {false, }}; | ||
bool joined | bool joined[nTeam] = {false, }; | ||
int nCase; | int nCase; | ||
int count = 0; | int count = 0; | ||
| Line 55: | Line 55: | ||
for (j=1 ; j<=nProblem ; j++) | for (j=1 ; j<=nProblem ; j++) | ||
{ | { | ||
team | team[i].correctSubmit[j] = false; | ||
team | team[i].incorrectSubmit[j] = false; | ||
} | } | ||
team | team[i].solvedProblem = 0; | ||
team | team[i].timePenalty = 0; | ||
} | } | ||
} | } | ||
| Line 79: | Line 79: | ||
cin.get(); | cin.get(); | ||
joined | joined[teamNumber] = true; | ||
switch (state) | switch (state) | ||
{ | { | ||
case 'I': | case 'I': | ||
team | team[teamNumber].incorrectSubmit[problemNumber] = true; | ||
break; | break; | ||
case 'C': | case 'C': | ||
if (team | if (team[teamNumber].correctSubmit[problemNumber] == false) | ||
{ | { | ||
team | team[teamNumber].solvedProblem++; | ||
team | team[teamNumber].timePenalty += timePenalty; | ||
if (team | if (team[teamNumber].incorrectSubmit[problemNumber] == true) | ||
team | team[teamNumber].timePenalty += 20; | ||
team | team[teamNumber].correctSubmit[problemNumber] = true; | ||
} | } | ||
break; | break; | ||
| Line 110: | Line 110: | ||
for (i=1 ; i<nTeam ; i++) | for (i=1 ; i<nTeam ; i++) | ||
{ | { | ||
if (joined | if (joined[i]) | ||
{ | { | ||
bestTeam = i; | bestTeam = i; | ||
| Line 123: | Line 123: | ||
for (i=1 ; i<nTeam ; i++) | for (i=1 ; i<nTeam ; i++) | ||
{ | { | ||
if (joined | if (joined[i]) | ||
{ | { | ||
if (team | if (team[i].solvedProblem > team[bestTeam].solvedProblem) | ||
bestTeam = i; // 푼 문제수가 가장 많은 팀을 뽑는다 | bestTeam = i; // 푼 문제수가 가장 많은 팀을 뽑는다 | ||
else if (team | else if (team[i].solvedProblem == team[bestTeam].solvedProblem | ||
&& team | && team[i].timePenalty < team[bestTeam].timePenalty) | ||
bestTeam = i; | bestTeam = i; | ||
else | else | ||
| Line 134: | Line 134: | ||
} | } | ||
} | } | ||
cout << bestTeam << " " << team | cout << bestTeam << " " << team[bestTeam].solvedProblem << " " | ||
<< team | << team[bestTeam].timePenalty << endl; | ||
joined | joined[bestTeam] = false; | ||
isBreak = 1; | isBreak = 1; | ||
} | } | ||
| Line 142: | Line 142: | ||
---- | ---- | ||
[[ContestScoreBoard]] [[AOI]] | [[ContestScoreBoard]] [[AOI]] | ||
Latest revision as of 12:46, 27 March 2026
소감
2005/06/18 Accepted 0:00.000 64
푼 문제수와 Time 패널티가 모두 같은 때에는 팀 번호가 작은 순으로 출력해야된다.
코드
#include <iostream>
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<nTeam ; i++)
{
for (j=1 ; j<=nProblem ; j++)
{
team[i].correctSubmit[j] = false;
team[i].incorrectSubmit[j] = false;
}
team[i].solvedProblem = 0;
team[i].timePenalty = 0;
}
}
void InputInformation(Team *team, bool *joined)
{
int teamNumber, problemNumber, timePenalty;
char state;
while (cin.peek() != EOF)
{
if (cin.peek() == '\n')
{
cin.get();
break;
}
cin >> 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<nTeam ; i++)
{
if (joined[i])
{
bestTeam = i;
isBreak = 0;
break;
}
}
if (isBreak != 0)
break;
for (i=1 ; i<nTeam ; i++)
{
if (joined[i])
{
if (team[i].solvedProblem > 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;
}
}