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

ErdosNumbers/차영권: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair batch-0002 pages from live compare)
 
Line 12: Line 12:
  struct Author
  struct Author
  {
  {
  char name[10];
  char name[10];
  int erdosNumber;
  int erdosNumber;
  };
  };
Line 30: Line 30:
   
   
  int i, j, k, l;
  int i, j, k, l;
  int saveBound[10];
  int saveBound[10];
  char temp[MAX_LENGTH], *c;
  char temp[MAX_LENGTH], *c;
  char search[10][20];
  char search[10][20];
  Author author[10][30];
  Author author[10][30];
   
   
  cin >> nDataBase >> nSearch;
  cin >> nDataBase >> nSearch;
Line 46: Line 46:
  while (*(c-2) != ':')
  while (*(c-2) != ':')
  {
  {
  author[m][number].name[n++] = *c;
  author[m][number].name[n++] = *c;
  if (*c == '.' && (*(c+1) == ',' || *(c+1) == ':'))
  if (*c == '.' && (*(c+1) == ',' || *(c+1) == ':'))
  {
  {
  author[m][number].name[n] = '\0';
  author[m][number].name[n] = '\0';
  number++; n=0; c++; c++;
  number++; n=0; c++; c++;
  }
  }
  c++;
  c++;
  }
  }
  temp[0] = '\0';
  temp[0] = '\0';
  saveBound[count] = number;
  saveBound[count] = number;
  m++; count++; number=0;
  m++; count++; number=0;
  }
  }
   
   
  int save[10] = {0, };
  int save[10] = {0, };
  int count2 = 0;
  int count2 = 0;
  count=0; n=0;
  count=0; n=0;
  for (i=0 ; i<m ; i++)
  for (i=0 ; i<m ; i++)
  {
  {
  for (j=0 ; j<saveBound[i] ; j++)
  for (j=0 ; j<saveBound[i] ; j++)
  {
  {
  // 줄에 에르되시가 있다면..
  // 줄에 에르되시가 있다면..
  if (strcmp(author[i][j].name, "Erdos, P.") == 0)
  if (strcmp(author[i][j].name, "Erdos, P.") == 0)
  {
  {
  for (k=0 ; k<saveBound[i] ; k++)
  for (k=0 ; k<saveBound[i] ; k++)
  {
  {
  if (k == j)
  if (k == j)
Line 76: Line 76:
  {
  {
  for (n=0 ; n<m ; n++)
  for (n=0 ; n<m ; n++)
  checkErdosNumberTo1(author[n], author[i][k].name, saveBound[n]);
  checkErdosNumberTo1(author[n], author[i][k].name, saveBound[n]);
  }
  }
  }
  }
  author[i][j].erdosNumber = -1;
  author[i][j].erdosNumber = -1;
  count2++;
  count2++;
  }
  }
  }
  }
  if (count2 == 0)
  if (count2 == 0)
  save[count++] = i;
  save[count++] = i;
  count2 = 0;
  count2 = 0;
  }
  }
   
   
  for (i=save[number] ; i!=0 ; i=save[++number])
  for (i=save[number] ; i!=0 ; i=save[++number])
  {
  {
  for (j=0 ; j<saveBound[i] ; j++)
  for (j=0 ; j<saveBound[i] ; j++)
  {
  {
  if (isThere(author[i], saveBound[i]))
  if (isThere(author[i], saveBound[i]))
  checkErdosNumberTo2(author[i], saveBound[i]);
  checkErdosNumberTo2(author[i], saveBound[i]);
  else
  else
  checkErdosNumberTo0(author[i], saveBound[i]);
  checkErdosNumberTo0(author[i], saveBound[i]);
  }
  }
  }
  }
   
   
  for (i=0 ; i<nSearch ; i++)
  for (i=0 ; i<nSearch ; i++)
  cin.getline(search[i], 20);
  cin.getline(search[i], 20);
   
   
  l = i;
  l = i;
  k = 0;
  k = 0;
   
   
  int saveResult[10]={0,};
  int saveResult[10]={0,};
   
   
  while (k < l)
  while (k < l)
Line 111: Line 111:
  for (i=0 ; i<m ; i++)
  for (i=0 ; i<m ; i++)
  {
  {
  for (j=0 ; j<saveBound[i] ; j++)
  for (j=0 ; j<saveBound[i] ; j++)
  {
  {
  if (strcmp(search[k], author[i][j].name) == 0)
  if (strcmp(search[k], author[i][j].name) == 0)
  saveResult[k] = author[i][j].erdosNumber;
  saveResult[k] = author[i][j].erdosNumber;
  }
  }
  }
  }
Line 124: Line 124:
  for (i=0 ; i<l ; i++)
  for (i=0 ; i<l ; i++)
  {
  {
  cout << search[i] << " ";
  cout << search[i] << " ";
  if (saveResult[i] == 2)
  if (saveResult[i] == 2)
  cout << "infinity" << endl;
  cout << "infinity" << endl;
  else
  else
  cout << saveResult[i] << endl;
  cout << saveResult[i] << endl;
  }
  }
  }
  }
Line 138: Line 138:
  {
  {
  for (int i=0 ; i<n ; i++)
  for (int i=0 ; i<n ; i++)
  author[i].erdosNumber = 0;
  author[i].erdosNumber = 0;
  }
  }
   
   
Line 145: Line 145:
  for (int i=0 ; i<n ; i++)
  for (int i=0 ; i<n ; i++)
  {
  {
  if (strcmp(author[i].name, name) == 0)
  if (strcmp(author[i].name, name) == 0)
  author[i].erdosNumber = 1;
  author[i].erdosNumber = 1;
  }
  }
  }
  }
Line 154: Line 154:
  for (int i=0 ; i<n ; i++)
  for (int i=0 ; i<n ; i++)
  {
  {
  if (author[i].erdosNumber == 1)
  if (author[i].erdosNumber == 1)
  continue;
  continue;
  else
  else
  author[i].erdosNumber = 2;
  author[i].erdosNumber = 2;
  }
  }
  }
  }
Line 165: Line 165:
  for (int i=0 ; i<n ; i++)
  for (int i=0 ; i<n ; i++)
  {
  {
  if (author[i].erdosNumber == 1)
  if (author[i].erdosNumber == 1)
  return true;
  return true;
  else
  else
Line 173: Line 173:
  }
  }
==== 나한테 할 말 ====
==== 나한테 할 말 ====

Latest revision as of 00:16, 27 March 2026

소감

2005/04/22 04:11:31.674 Time Limit Exceeded 0:10.047 444 Time Limit 나올꺼 같았다. 루프의 사용이 깔끔하지 못한거 같다.

코드

// erdosNumbers.cpp
#include <iostream.h>
#include <cstring>

#define MAX_LENGTH 100

struct Author
{
	char name[10];
	int erdosNumber;
};

void checkErdosNumberTo0(Author *p, int n);
void checkErdosNumberTo1(Author *p, char *c, int n);
void checkErdosNumberTo2(Author *p, int n);
bool isThere(Author *p, int n);
			
int main()
{
	int scenario=1;
	while (1)
	{
	int nDataBase, nSearch;
	int count = 0, n = 0, m = 0, number = 0;

	int i, j, k, l;
	int saveBound[10];
	char temp[MAX_LENGTH], *c;
	char search[10][20];
	Author author[10][30];

	cin >> nDataBase >> nSearch;
	cin.get();

	/* 입력받은 줄에서 이름을 추출한다 */
	while (count < nDataBase)
	{
		cin.getline(temp, MAX_LENGTH);
		c = temp;

		while (*(c-2) != ':')
		{
			author[m][number].name[n++] = *c;
			if (*c == '.' && (*(c+1) == ',' || *(c+1) == ':'))
			{
				author[m][number].name[n] = '\0';
				number++; n=0; c++; c++;
			}				
			c++;
		}
		temp[0] = '\0';
		saveBound[count] = number;
		m++; count++; number=0;
	}

	int save[10] = {0, };
	int count2 = 0;
	count=0; n=0;
	for (i=0 ; i<m ; i++)
	{
		for (j=0 ; j<saveBound[i] ; j++)
		{
			// 줄에 에르되시가 있다면..
			if (strcmp(author[i][j].name, "Erdos, P.") == 0)
			{
				for (k=0 ; k<saveBound[i] ; k++)
				{
					if (k == j)
						continue;
					else
					{
						for (n=0 ; n<m ; n++)
							checkErdosNumberTo1(author[n], author[i][k].name, saveBound[n]);
					}
				}					
				author[i][j].erdosNumber = -1;
				count2++;
			}
		}
		if (count2 == 0)
			save[count++] = i;
		count2 = 0;
	}

	for (i=save[number] ; i!=0 ; i=save[++number])
	{
		for (j=0 ; j<saveBound[i] ; j++)
		{
			if (isThere(author[i], saveBound[i]))
				checkErdosNumberTo2(author[i], saveBound[i]);
			else
				checkErdosNumberTo0(author[i], saveBound[i]);
		}
	}

	for (i=0 ; i<nSearch ; i++)
		cin.getline(search[i], 20);

	l = i;
	k = 0;

	int saveResult[10]={0,};

	while (k < l)
	{
		for (i=0 ; i<m ; i++)
		{
			for (j=0 ; j<saveBound[i] ; j++)
			{
				if (strcmp(search[k], author[i][j].name) == 0)
					saveResult[k] = author[i][j].erdosNumber;
			}
		}
		k++;
	}

	cout << "Scenario " << scenario++ << endl;

	for (i=0 ; i<l ; i++)
	{
		cout << search[i] << " ";
		if (saveResult[i] == 2)
			cout << "infinity" << endl;
		else
			cout << saveResult[i] << endl;
	}
	}

	return 0;
}

void checkErdosNumberTo0(Author *author, int n)
{
	for (int i=0 ; i<n ; i++)
		author[i].erdosNumber = 0;
}

void checkErdosNumberTo1(Author *author, char *name, int n)
{
	for (int i=0 ; i<n ; i++)
	{
		if (strcmp(author[i].name, name) == 0)
			author[i].erdosNumber = 1;
	}
}

void checkErdosNumberTo2(Author *author, int n)
{
	for (int i=0 ; i<n ; i++)
	{
		if (author[i].erdosNumber == 1)
			continue;
		else
			author[i].erdosNumber = 2;
	}
}

bool isThere(Author *author, int n)
{
	for (int i=0 ; i<n ; i++)
	{
		if (author[i].erdosNumber == 1)
			return true;
		else
			continue;
	}
	return false;
}

나한테 할 말