Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

ContestScoreBoard/차영권: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Table transclusion repair v1)
 
Line 1: Line 1:
==== 소감 ====
==== 소감 ====
{{| 2005/06/18 Accepted 0:00.000 64 |}}
2005/06/18 Accepted 0:00.000 64


푼 문제수와 Time 패널티가 모두 같은 때에는 팀 번호가 작은 순으로 출력해야된다.
푼 문제수와 Time 패널티가 모두 같은 때에는 팀 번호가 작은 순으로 출력해야된다.
Line 16: Line 16:
  int solvedProblem; // 푼 문제의 수
  int solvedProblem; // 푼 문제의 수
  int timePenalty; // 시간 패널티
  int timePenalty; // 시간 패널티
  bool incorrectSubmit[nProblem];
  bool incorrectSubmit[nProblem];
  bool correctSubmit[nProblem];
  bool correctSubmit[nProblem];
  };
  };
   
   
Line 26: Line 26:
  int main()
  int main()
  {
  {
  Team team[nTeam] = {{0, }, {0, }, {false, }, {false, }};
  Team team[nTeam] = {{0, }, {0, }, {false, }, {false, }};
  bool joined[nTeam] = {false, };
  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[i].correctSubmit[j] = false;
  team[i].correctSubmit[j] = false;
  team[i].incorrectSubmit[j] = false;
  team[i].incorrectSubmit[j] = false;
  }
  }
  team[i].solvedProblem = 0;
  team[i].solvedProblem = 0;
  team[i].timePenalty = 0;
  team[i].timePenalty = 0;
  }
  }
  }
  }
Line 79: Line 79:
  cin.get();
  cin.get();
   
   
  joined[teamNumber] = true;
  joined[teamNumber] = true;
   
   
  switch (state)
  switch (state)
  {
  {
  case 'I':
  case 'I':
  team[teamNumber].incorrectSubmit[problemNumber] = true;
  team[teamNumber].incorrectSubmit[problemNumber] = true;
  break;
  break;
  case 'C':
  case 'C':
  if (team[teamNumber].correctSubmit[problemNumber] == false)
  if (team[teamNumber].correctSubmit[problemNumber] == false)
  {
  {
  team[teamNumber].solvedProblem++;
  team[teamNumber].solvedProblem++;
  team[teamNumber].timePenalty += timePenalty;
  team[teamNumber].timePenalty += timePenalty;
  if (team[teamNumber].incorrectSubmit[problemNumber] == true)
  if (team[teamNumber].incorrectSubmit[problemNumber] == true)
  team[teamNumber].timePenalty += 20;
  team[teamNumber].timePenalty += 20;
  team[teamNumber].correctSubmit[problemNumber] = true;
  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[i])
  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[i])
  if (joined[i])
  {
  {
  if (team[i].solvedProblem > team[bestTeam].solvedProblem)
  if (team[i].solvedProblem > team[bestTeam].solvedProblem)
  bestTeam = i; // 푼 문제수가 가장 많은 팀을 뽑는다
  bestTeam = i; // 푼 문제수가 가장 많은 팀을 뽑는다
  else if (team[i].solvedProblem == team[bestTeam].solvedProblem
  else if (team[i].solvedProblem == team[bestTeam].solvedProblem
  && team[i].timePenalty < team[bestTeam].timePenalty)
  && team[i].timePenalty < team[bestTeam].timePenalty)
  bestTeam = i;
  bestTeam = i;
  else
  else
Line 134: Line 134:
  }
  }
  }
  }
  cout << bestTeam << " " << team[bestTeam].solvedProblem << " "
  cout << bestTeam << " " << team[bestTeam].solvedProblem << " "
      << team[bestTeam].timePenalty << endl;
      << team[bestTeam].timePenalty << endl;
  joined[bestTeam] = false;
  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;
	}
}

ContestScoreBoard AOI