태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
블로그 이미지
Lonewolf dlbo

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Notice

'Solutions/Dlbo's Solution'에 해당되는 글 72

  1. 2011.08.11 PKU 3074. Sudoku. AC get -_-(1)
  2. 2011.04.09 PKU 3364. Black and white painting. AC get~
  3. 2011.04.06 UVa 628. Passwords. AC g~e~t~
  4. 2011.03.19 PKU 3132. Sum of Different primes. AC get -_-
  5. 2011.03.14 PKU 2291. Rotten Ropes. AC get -_-!
  6. 2011.03.06 PKU 2181. Jumping Cows -_- AC get(2)
  7. 2010.12.24 PKU 3032. Card Trick. AC get -_-(2)
  8. 2010.11.02 PKU 3176. Cow bowling. AC get -_-
  9. 2010.10.28 PKU 2260. Error Correction. AC get -_-(3)
  10. 2010.10.28 PKU 3085. Quick Change. AC get -_-
  11. 2010.06.24 PKU 1422. Air Raid. AC get!
  12. 2010.06.23 PKU 1422. Air raid. WA -_-....(2)
  13. 2010.06.22 PKU 2844. Sum and Product. TLE -_-(1)
  14. 2010.06.01 PKU 1050. To the max. get AC -_-;;
  15. 2010.04.06 PKU 2245. Lotto. 에이씨 -_-(2)
  16. 2010.03.21 PKU 2245. Lotto. WA -_- 니미;(4)
  17. 2010.03.07 PKU 2390. Bank Interest. AC get -_-(1)
  18. 2010.02.28 PKU 2871. A Simple Question of Chemistry. AC get -_-!(2)
  19. 2010.02.03 PKU 3589. Number-guessing Game. AC get -_-(1)
  20. 2010.01.30 PKU 1989. The Cow Lineup, AC get -_-;;
  21. 2010.01.30 UVa 562. Dividing coins. AC get -_-;
  22. 2010.01.14 PKU 3224. Go for lap Cup! AC get -_-(2)
  23. 2010.01.14 PKU 3372. Candy Distribution. AC get -_-
  24. 2009.10.19 PKU 1547. Clay Bully. AC get.
  25. 2009.10.18 PKU 2000. Gold Coins. AC get.
  26. 2009.10.18 PKU 2853. Sequence Sum Possibilities. AC get.
  27. 2009.10.18 PKU 2665. Trees. AC get.(2)
  28. 2009.10.18 PKU 3673. Cow Multiplication. AC get!
  29. 2009.10.18 PKU 1008, UVa 300. Maya Calendar. AC get.
  30. 2009.06.25 PKU1218. The Drunk Jailer. Ac get =_=...
2011.08.11 20:04 Solutions/Dlbo's Solution
아 나

스도쿠 한번 풀기 더럽게 빡치네

이게 얼마나 걸린거야 -_- 
#include 
#include 

#define SIBAL 750
#define CIBAL 350
#define V SIBAL*CIBAL

int U[V], D[V];
int L[V], R[V];
int C[V], ROW[V];
int H[SIBAL], S[CIBAL];
int size;
char s[10][10];
int nimiral1[SIBAL], nimiral2[SIBAL], OK[87];
char nimhi[SIBAL];

void Link(int r, int c)
{
    S[c]++ ;
	C[size] = c;
    ROW[size] = r;
    U[size] = U[c];
	D[U[c]] = size;
    D[size] = c;
	U[c] = size;

    if (H[r] ==  - 1)
	{
		H[r] = L[size] = R[size] = size;
	}
    else
    {
        L[size] = L[H[r]];
		R[L[H[r]]] = size;
        R[size] = H[r];
		L[H[r]] = size;
    }

    size++ ;
}

void remove(int c)
{
    int i, j;

    L[R[c]] = L[c];
    R[L[c]] = R[c];

    for (i = D[c]; i != c; i = D[i])
    {
        for (j = R[i]; j != i; j = R[j])
        {
            S[C[j]]-- ;
            U[D[j]] = U[j];
            D[U[j]] = D[j];
        }
    }
}

void resume(int c)
{
    int i, j;

    for (i = U[c]; i != c; i = U[i])
    {
        for (j = L[i]; j != i; j = L[j])
        {
            S[C[j]]++ ;
            U[D[j]] = D[U[j]] = j;
        }
    }

    R[L[c]] = L[R[c]] = c;
}

int Jotto(int k)
{
    int i, j, Min, c;

    if (!R[0])
	{
		return 1;
	}

    for (Min = SIBAL, i = R[0]; i; i = R[i])
	{
		if (Min > S[i])
		{
			Min = S[i];
			c = i;
		}
	}

    remove(c);

    for (i = D[c]; i != c; i = D[i])
    {
        for (j = R[i]; j != i; j = R[j])
		{
            remove(C[j]);
		}

        OK[k] = ROW[i];

        if (Jotto(k + 1))
		{
			return 1;
		}

        for (j = L[i]; j != i; j = L[j])
		{
            resume(C[j]);
		}
    }

    resume(c);
    return 0;
}

int main()
{
    int i, j, k, r;
    char st[87];

    while (gets(st))
    {
		if (st[0] == 'e')
		{
			break;
		}

        i = 0;

        for (j = 1; j <= 9; j++)
		{
            for (k = 1; k <= 9; k++)
			{
                s[j][k] = st[i++];
			}
		}
        for (i = 0; i <= 324; i++)
        {
            S[i] = 0;
            D[i] = U[i] = i;
            L[i + 1] = i;
			R[i] = i + 1;
        }

		R[324] = 0;
        size = 325;
        r = 0;
        memset(H,  - 1, sizeof(H));

        for (i = 1; i <= 9; i++)
        {
            for (j = 1; j <= 9; j++)
            {
                if (s[i][j] != '.')
                {
                    r++ ;
                    nimiral1[r] = i;
                    nimiral2[r] = j;
                    nimhi[r] = s[i][j];
                    Link(r, (i - 1)*9 + j);
                    Link(r, 81 + (i - 1)*9 + s[i][j] - '0');
                    Link(r, 162 + (j - 1)*9 + s[i][j] - '0');
                    Link(r, 243 + ((i - 1)/3)*27  + ((j - 1)/3)*9  + s[i][j] - '0');    
                }
                else 
                {
                    for (k = 1; k <= 9; k++)
                    {
                        r++ ;
                        nimiral1[r] = i;
                        nimiral2[r] = j;
                        nimhi[r] = k + '0';
                        Link(r, (i - 1)*9 + j);
                        Link(r, 81 + (i - 1)*9 + k);
                        Link(r, 162 + (j - 1)*9 + k);
                        Link(r, 243 + ((i - 1)/3)*27  + ((j - 1)/3)*9  + k );        
                    }
                }
            }
        }

        Jotto(0);

        for (i = 0; i<81; i++)
		{
            s[nimiral1[OK[i]]][nimiral2[OK[i]]] = nimhi[OK[i]];
		}
        for (i = 1; i<= 9; i++)
		{
            for (j = 1; j <= 9; j++)
			{
                printf("%d", s[i][j] - '0');
			}
		}
        puts("");
    }

    return 0;
}
지금쯤 훈련소를 나왔을 지군에게 이 코드를 바침 -_-
posted by Lonewolf dlbo
TAG 스도쿠

댓글을 달아 주세요

  1. zz 난 당장은 모르겠고

    이번달 안에 풀어보도록 노력하겠음 ㅋㅋㅋㅋ

2011.04.09 15:48 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int n, m, c;

	while(cin >> n >> m >> c)
	{
		if (n == 0 && m == 0 && c == 0)
		{
			break;
		}

		if(n < 8 || m < 8)
		{
			cout << 0 << endl;
			continue;
		}

		if(n % 2 != 0 || m % 2 != 0)
		{
			if (c >= 1)
			{
				cout << (m - 7) * (n - 7) / 2 << endl;
				continue;
			}
			else
			{
				cout << (m - 7) * (n - 7) / 2 << endl;
				continue;
			}
		}
		else
		{
			if(c >= 1)
			{
				cout << (m - 8) * (n - 8) / 2 + 1 + (n - 8) / 2 + (m - 8) / 2 << endl;
				continue;
			}
			else
			{
				cout << (n - 8) * (m - 8) / 2 + (n - 8) / 2 + (m - 8) / 2 << endl;
			}
		}
	}
}



부어어어어

귀차니즘. 
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.04.06 20:45 Solutions/Dlbo's Solution
#include 
#include 

char words[101][300], input[10000];
int n, m, now, tot;
int out[10];

void fuck(int x)
{
    int i, k;
    if (x == tot)
    {
        k = 0;

        for (i = 0; input[i]; i++)
        {
            if (input[i] == '#')
			{
                printf("%s", words[now]);
			}
            else
			{
                putchar(out[k++] + '0');
			}
        }

        putchar('\n');

        return;
    }
   

    for (i = 0; i < 10; i++)
    {
        out[x] = i;
        fuck(x + 1);
    }
}

int main()
{
    int i, j;
    while (~scanf("%d", &n))
    {
        getchar();

        for (i = 0; i < n; i++)
		{
            gets(words[i]);
		}

        puts("--");
        scanf("%d", &m);
        getchar();

        for (i = 0; i < m; i++)
        {
            gets(input);
            tot = 0;

            for (j = 0; input[j]; j++)
            {
                if (input[j] == '0')
				{
                    tot++;
				}
            }

            for (j = 0; j < n; j++)
            {
                now = j;
                fuck(0);
            }
        }
    }

    return 0;
}  


ㄹㄹㄹㄹ

걍 단어사전 만들어서

갔다가 이어붙이기 ㄹㄹㄹ
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.03.19 18:43 Solutions/Dlbo's Solution
#include 
#include 

using namespace std;

set tool;
set::iterator sit;
int tot, n, k, cnt, checker[15][1121];

void maketool()
{
	int i;
	bool isPrime;

	tool.insert(2);
	tool.insert(3);

	for (i = 5; i <= 1120; i += 2)
	{
		isPrime = true;
		for (sit = tool.begin(); sit != tool.end(); sit++)
		{
			if (i % *(sit) == 0)
			{
				isPrime = false;
				break;
			}
		}

		if (isPrime)
		{
			tool.insert(i);
		}
	}
}

int main()
{
	int i, j, k, l;
	set::iterator dit;
	maketool();

	while (cin >> n >> k)
	{
		if (n == 0 && k == 0)
		{
			break;
		}

		memset(checker, 0, sizeof(checker));
		checker[0][0] = 1;

		for(j = 0, dit = tool.begin(); j < tool.size() && *(dit) <= n; j++, dit++)
		{
			for(i = k; i >= 1; i--)
			{
				for(l = n; l >= *(dit); l--)
				{
					checker[i][l] += checker[i - 1][l - *(dit)];
				}
			}
		}
		cout << checker[k][n] << endl;
	}
}

이런 쒯

짜증나게 더럽네 ㄱ-

고생 더럽게 했음요.

처음엔 소수를 tool 셋을 이용해 DFS로 탐색했으나,

100 5만 해도 거의 안드로메다급 탐색시간을 보여줘서 GG

그리고 다시 곰곰히 생각해보니 k가 커봐야 14라는 점을 기억해내고, 저런 알고리즘을 짜내봤습니다.

checker의 k, n번째 있는게 답이고,

소수의 리스트를 전부 싹다 더해보고 비벼보고 하면서 checker 배열에 가능한 갯수들을 체크해

넣어보되, 그 탐색 범위를 소수 내에서, k개 골라서, n보다 작고 현재 검사중인 소수보다 큰 놈을 이용해서

뭐 이거 설명하기도 더럽네 -_-

여튼 그렇게 비비고 볶고 해서 맵을 만들어서(자기 자신만으로 답인거, 2개 합해서 되는거, 3개 해서 되는거, .... k개 해서 되는거) 

로 최종 결산해 답을 가져오는 코드입니다.

진짜 더럽다 ㄱ- 
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.03.14 20:11 Solutions/Dlbo's Solution
#include 
#include 

int cal[1000];

int chk(const void * a,const void * b)
{
	if (*(int*)a > *(int*)b)
	{
		return -1;
	}
	else if (*(int*)a == *(int*)b)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}

int main()
{
	int cases, n, t, w, i, j, max;

	scanf("%d", &cases);
	while(cases--)
	{
		max = 0;
		scanf("%d", &n);
		for (i = 0; i < n; i++)
		{
			scanf("%d", &cal[i]);
			if (cal[i] > max)
			{
				max = cal[i];
			}
		}

		qsort(cal, n, sizeof(int), chk);

		for (i = n - 1; i >= 0; i--)
		{
			if (cal[i] * (i + 1) > max)
			{
				max = cal[i] * (i + 1);
			}
		}

		printf("%d\n", max);
	}

	return 0;
}


우쒸 몸 열라리 아프네요

숨을 못쉬어 -_-

그냥 간단합니다.

제일 약한 로프만큼만 걸 수 있으니까

큰 숫자부터 소트 때려버리고

가장 작은 숫자부터 버틸 수 있는 무게 * 밧줄 갯수

한 값이 가장 크면 그게 답입니다.

간단히 말해서 10 1 15면

15 10 1로 소트해놓고

1부터 역으로 1 * 3은 3이니 최대 3,

10 * 2는 20이니 최대 20

15 * 1은 15니 최대 15

이중 답은 20

요렇게 풀어나가면 간단.
posted by Lonewolf dlbo

댓글을 달아 주세요

2011.03.06 13:17 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int n, i, j, cnt = 1, sum = 0, total = 0, temp = 0;
	int buf[150000];

	cin >> n ;

	for (i = 0; i < n; i++)
	{
		cin >> buf[i];
	}


	for(j = 1; j <= n; j++)
	{
		if(cnt % 2 != 0)
		{
			if(buf[j - 1] > buf[j])
			{
				temp = buf[j - 1];
				cnt++;
				sum += temp;
			}
		}
		else
		{
			if(buf[j] > buf[j - 1])
			{
				temp = buf[j - 1];
				cnt++;
				sum -= temp;
			}
		}
	}

	cout << sum << endl;

	return 0;
}

시망 -_- 스파킹 이자식 번역 한참 안하더니 이상해졌어

홀수번 포션을 마시면 +, 짝수번 포션을 마시면 -가 아니고, 실제 마신 순서대로 홀수번째 마시면 +, 짝수번째 마시면 -가 됩니다. 어떤 포션이던간에.

거기에, 한번 패스한 포션, 마신 포션은 무조건 패스.

앞에서부터 순차탐색으로 하나하나 오면서, 숫자 큰놈 하나 마시고,

먼저 마신놈보다 작은 숫자 하나 집어마시고,

그다음 다시 또 마시고,

다시 또 먼저 마신것보다 작은 숫자 하나 집어마시면서 진행하면 최대값 나옵니다.
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 이대로 제출한거 맞냐?

    예제만 돌려도 답이 안나올 것 같은데 -_-;

  2. 아…
    답이 안나오는게 아니었구나

    buf[n-1] 뒤로는 초기화가 안되어있어서 저렇게 돌려도 답이 나오네 -_-

    j가 1부터 n-1까지인줄 알았는데 n까지였구나 -_-

2010.12.24 16:14 Solutions/Dlbo's Solution
#include 
#include 

using namespace std;

void repack(int * target, int * src, int start,int size)
{
	memcpy(target, src + start - size, size);
	memcpy(src, src + start - size, start - size);
	memcpy(src, target, size);
}

int main()
{
	int arr[13], cnt, cases, input, i, movset, temparr[13];

	cin >> cases;
	while (cases--)
	{
		for (cnt = 0; cnt < 13; cnt++)
		{
			arr[cnt] = 0;
		}

		cin >> input;
		cnt = 1;
		while (input)
		{
			for (i = cnt - 1; i >= 0; i--)
			{
				arr[i + 1] = arr[i];
			}
			arr[0] = input;

			if (cnt > 1)
			{
				if (cnt < input)
				{
					movset = input % cnt;
					if (movset == 0)
					{
						cnt++;
						input--;
						continue;
					}
					//repack(temparr, arr, cnt, movset);
					memcpy(temparr, arr + cnt - movset, movset * sizeof(int));
					memcpy(arr + movset, arr, (cnt - movset) * sizeof(int));
					memcpy(arr, temparr, movset * sizeof(int));
				}
				else if (cnt > input)
				{
					//repack(temparr, arr, cnt, input);
					movset = input;
					memcpy(temparr, arr + cnt - movset, movset * sizeof(int));
					memcpy(arr + movset, arr, (cnt - movset) * sizeof(int));
					memcpy(arr, temparr, movset * sizeof(int));
				}
			}
			cnt++;
			input--;
		}

		for (i = 0; i < cnt - 1; i++)
		{
			cout << arr[i] << " ";
		}
		cout << endl;
	}

	return 0;
}
아오 -_-

코딩 너무 오랜만이라 함수 만들었다가 도로 풀고 종이쪼가리에 풀어가면서 했음.

컴파일러 없으니 더럽게 빡시네요.
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 제목 2032 ⇒ 3032 수정좀 :)

2010.11.02 16:29 Solutions/Dlbo's Solution
#include 

int main()
{
	int arr[400][400], n, i, j, max;

	scanf("%d", &n);

	for (i = 0; i < n; i++)
	{
		for (j = 0; j <= i; j++)
		{
			scanf("%d", &arr[i][j]);

			if (i > 1)
			{
				if (j == 0)
				{
					arr[i][j] += arr[i - 1][j];
				}
				else
				{
					arr[i][j] += (arr[i - 1][j - 1] > arr[i - 1][j]) ? arr[i - 1][j - 1] : arr[i - 1][j];
				}
			}
			else if (i == 1)
			{
				arr[i][j] += arr[0][0];
			}
		}
	}

	max = 0;

	for (i = 0; i < n; i++)
	{
		if (arr[n - 1][i] > max)
		{
			max = arr[n - 1][i];
		}
	}

	printf("%d\n", max);
}
흠...

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 2181. Jumping Cows -_- AC get  (2) 2011.03.06
PKU 3032. Card Trick. AC get -_-  (2) 2010.12.24
PKU 3176. Cow bowling. AC get -_-  (0) 2010.11.02
PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.10.28 11:02 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int n, horsum, versum, horcnt, vercnt, i, j, x[100][100], cx, cy;
	while (cin >> n)
	{
		horcnt = 0;
		vercnt = 0;
		if (!n)
		{
			break;
		}

		for (i = 0; i < n; i++)
		{
			horsum = 0;
			for (j = 0; j < n; j++)
			{
				cin >> x[i][j];
				horsum = x[i][j] + horsum;
			}

			if (horsum % 2 != 0)
			{
				cx = i;
				horcnt++;
			}
		}

		if (horcnt >= 2)
		{
			cout << "Corrupt" << endl;
			continue;
		}

		for (j = 0; j < n; j++)
		{
			versum = 0;
			for (i = 0; i < n; i++)
			{
				versum = versum + x[i][j];
			}

			if (versum % 2 != 0)
			{
				cy = j;
				vercnt++;
			}
		}

		if (vercnt >= 2)
		{
			cout << "Corrupt" << endl;
			continue;
		}

		if (horcnt == 0 && vercnt == 0)
		{
			cout << "OK" << endl;
		}
		else
		{
			cout << "Change bit (" << cx + 1 << "," << cy + 1 << ")" << endl;
		}
	}

	return 0;
}

이게 바로 무컴파일 AC -_-

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3032. Card Trick. AC get -_-  (2) 2010.12.24
PKU 3176. Cow bowling. AC get -_-  (0) 2010.11.02
PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 이것이 진정 ㅋㅋㅋ

2010.10.28 10:30 Solutions/Dlbo's Solution
#include 

using namespace std;

int main()
{
	int sum, peb[5], res[5], num, i, j;


	peb[1] = 25;
	peb[2] = 10;
	peb[3] = 5;
	peb[4] = 1;
	cin >> num;
	for (i = 1; i <= num; i++)
	{
		cin >> sum;
		cout << i << " ";
		for (j = 1; j <= 4; j++)
		{
			res[j] = sum / peb[j];
			sum = sum % peb[j];
		}
		cout << res[1] << " QUARTER(S), " << res[2] << " DIME(S), " << res[3] << " NICKEL(S), " << res[4] << " PENNY(S)" << endl;
	}

	return 0;
}

아으....

컴 겨우 어떻게 살리긴 했는데 컴파일 한번 하고 죽음. -_-;

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3176. Cow bowling. AC get -_-  (0) 2010.11.02
PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.06.24 10:19 Solutions/Dlbo's Solution


이쯔어 뉴 솔루션!

원리는 예전과 같아요~

다만 구현방식을 2개의 행렬에서 1개의 입력행렬과, 추적을 위한 checked(방문했나, 가능하나)와 followed(이 노드가 널 가르킨다)

의 2개 배열을 이용해 간략화 시켰을 뿐입니다.

처리과정과 결과 완전히 동일합니다.

-_-...

왜 전에껀 WA일까?

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 2260. Error Correction. AC get -_-  (3) 2010.10.28
PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.06.23 16:52 Solutions/Dlbo's Solution


쉬바.... 신이시여..

-_-

역시 역무실에서 메모장 코딩에는 한계가 있는건가.

풀이는 간단합니다.

n개의 요소가 있는 그래프에서, 각 노드의 차수를 최소로 하는 신장트리를 구성하면 됩니다.

이렇게 하면 리프노드와 루트의 갯수가 최소화되어, 각 루트와 리프의 갯수만큼만 특공대를 투입하면 최소의 인원만

투입이 가능하지요.

여기서 주의할 점은, 단순히 신장트리가 되는것 뿐만 아니라, 상황에 따라서는 트리가 아닌 포레스트를 다뤄야 합니다.

이로 인해 다중 연결 리스트를 사용해 처리하게 되면 머리가 꽤나 아파집니다.

제 경우는 n개의 intersection에 대해 n * n의 행렬을 사용해 표현했습니다.

일단 found라는, 최초 입력에 따른 유향 그래프와, result라는, 연산 과정과 최종 연산 결과를 담을 2개의 배열을 사용했습니다.

1차로 found에 입력을 받고, 그 내용을 result에 카피합니다.

이후, 1개 거쳐서 가는 방법, 2개 거쳐서 가는 방법, 3개 걸쳐서 가는 방법, ..... n - 1개 거쳐서 가는 방법을 모두 표기합니다.

여기서 일단 n^3의 시간이 소요됩니다.

이 방법으로 나온 결과물에는 root to leaf의 경우와 그 중간 경로가 섞여져 들어가 있습니다.

여기서 다시한번 root to leaf가 아닌 경우를 모두 솎아냅니다.

root to leaf가 아닌 경우는 0으로, 맞는 경우는 전부 1로 바꿔버린 후,

result 안의 내용을 다 더해서 sum에 저장해 버립니다.

이렇게 되면, 자동으로 root to leaf의 갯수를 카운트 할 수 있게 되며, 이 카운트 한 값이 답입니다.

근데.... 왜 WA냐고 -_-

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3085. Quick Change. AC get -_-  (0) 2010.10.28
PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
PKU 2245. Lotto. 에이씨 -_-  (2) 2010.04.06
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 나도 한물 갔어 -_-

    • Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.06.24 20:27  Addr Edit/Del

      ㅋ 늙은이돋네

      나이 얼마나 먹었다고 한물드립이여 ㅋㅋ

2010.06.22 13:03 Solutions/Dlbo's Solution


아오 씨바 빡쳐 -_-;; 이거도 TL이냐?;;;

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 1422. Air Raid. AC get!  (0) 2010.06.24
PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
PKU 2245. Lotto. 에이씨 -_-  (2) 2010.04.06
PKU 2245. Lotto. WA -_- 니미;  (4) 2010.03.21
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 욕쓰지마 이놈아

2010.06.01 23:11 Solutions/Dlbo's Solution


슙라;

이미 푼거였는데 합과곱에 정신팔려서

이미 푼 문제인지 모르고 제껴놓고 있었습니다.

-_-;

이거 그냥 돌리면 TL 그냥 걸립니다.

5 X 5 배열을 받는다고 가정할때,

(0, 0)부터 (0, 4)까진 그냥 받고,

(1, 0)부터 (1, 4)까진 (0, 0)부터 (0, 4)까지의 값을 각각 더해서 저장합니다.

그러니까, (1, 0)에는 (0, 0)의 원래 값과, (1, 0)에 입력받은 값이 더해진채로 저장되는 것이지요.

이후 (2, 1)부터 (4, 2)까지의 부분행렬 내의 값들 합을 구하고 싶다면,

(3, 2)와 (3, 0)을 빼고, (4, 2)에서 (4, 0)를 뺍니다. 또한 (2, 2)에서 (2, 0)을 빼구요.

이 값들은 각각 (3, 1)과 (3, 2)의 합, (4, 1)과 (4, 2)의 합, (2, 1)과 (2, 2)의 합이 되지요.

이 세 값의 합이 원하는 답이 되는겁니다.

간단하지요?

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 1422. Air raid. WA -_-....  (2) 2010.06.23
PKU 2844. Sum and Product. TLE -_-  (1) 2010.06.22
PKU 1050. To the max. get AC -_-;;  (0) 2010.06.01
PKU 2245. Lotto. 에이씨 -_-  (2) 2010.04.06
PKU 2245. Lotto. WA -_- 니미;  (4) 2010.03.21
PKU 2390. Bank Interest. AC get -_-  (1) 2010.03.07
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.04.06 14:58 Solutions/Dlbo's Solution


에이씨 -_-

저기 잘 보시면 //로 주석처리한 부분이 보이실 껍니다.

그 부분때문에 8개 이상 입력되면 중복출력이 되더군요.

에이씨 -_-
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.04.07 21:23  Addr Edit/Del Reply

    z 에이씨 받아놓고 ac라고 그러네

  2. 인생이여 ㅋㅋ

2010.03.21 21:12 Solutions/Dlbo's Solution


Mr.K의 방법과 유사합니다만, 출력이 처리에 결합된 부분이 다릅니다.

이 부분에서 실수를 좀 했었는데, 마지막 함수에서 출력을 몰아서 해야 하건만, 매 프로세스마다 출력하도록 실수했었죠;

1 2 3 4 5 6 7중 6개를 뽑아야 한다면

1로 시작하는 1번째 묶음을 찾아 출력합니다.

이 때, 1 2 3 4 5 6이 첫번째 솔루션이고

두번째 솔루션은 1 2 3 4 5 7로 마지막 한 숫자가 바뀝니다.

세번째 부분세트에서는 1 2 3 4 6 7로 뒤에서 두번째가 바뀐 채 더 이상의 솔루션이 없고

네번째 부분세트에서는 1 2 3 5 6 7로 뒤에서 세번째가 바뀐 채 더 이상의 솔루션이 존재하지 않습니다.

이런 과정을 거쳐서 맨 앞 숫자를 n개 입력받았을때, n - 6개만큼의 맨 앞 숫자에 가능한 세트로 존재합니다.

동시에, 2번째 숫자는 n - 7개의 숫자중에서 선택이 가능하지요.

이 방법을 적용해 루프를 돌린 풀이입니다.



설마 도 ㅁㅊ ㅎㄷㅅ 이거가지고 마초 한다스 이딴거 나오는건 아니겠지 -_-;


수정 - 젠장; 저번 제출한거 서버에 안올라가 있길래 뭐지... 하고 다시 내보니 롱 앤서 랩니다; 뭐지 이건;;;;
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.03.21 23:23  Addr Edit/Del Reply

    아 =_= 저렇게 하면 굳이 dummy variable set을 만들 필요도 없구만;

  2. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.03.22 23:26  Addr Edit/Del Reply

    -_-;; 롱 앤서라고 떠서 그냥 wa라고 바꿔놓은거임? 아니면 아예 wa?

    • Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo 2010.03.23 23:26  Addr Edit/Del

      WA임; 원래 AC였는데 그 제출 기록이 사라졌어; 코드 고치면서 뭐가 문제인지 찾고있다;

    • Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.03.24 07:58  Addr Edit/Del

      혹시 getPerm()이 재귀라서 문제가 발생하는거 아닐지? =_=

2010.03.07 18:45 Solutions/Dlbo's Solution


다시한번 숏코딩 ㄱㄱ
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.03.09 20:54  Addr Edit/Del Reply

    다시한번이라니?

    처음 제출한건 어디다 팔아먹고 다시한번임? ㅋ

2010.02.28 21:02 Solutions/Dlbo's Solution


숏코딩작렬
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. Favicon of http://cm4st.tistory.com BlogIcon Mr.K 2010.02.28 23:06  Addr Edit/Del Reply

    textarea도 숏으로 썼나봄 =_=;

2010.02.03 12:33 Solutions/Dlbo's Solution



풀라다 보니 뭔가 익숙해서

검색해보니 푼 문제더군. -_-;

숫자와 위치까지 같으면 A, 숫자만 같고 위치가 다르면 B로 카운팅해 출력하면 됩니다.
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. Favicon of http://klone.tistory.com BlogIcon Mr.K 2010.02.03 15:04  Addr Edit/Del Reply

    아 -_-; 이게 훨씬 간단하구만

    마지막줄 태ㅋ그ㅋ

2010.01.30 17:59 Solutions/Dlbo's Solution
슈....슈바;;

설마 이따위일 줄이야;;;



니...님히;;;

문제 개같습니다;

걍 N을 K로 나눈 몫에 나머지가 있으면 + 1, 아니면 그 몫이 답인듯 -_-;
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.01.30 17:23 Solutions/Dlbo's Solution


하앍하앍.

원래 리스트와 셋을 이용해 처리하려 했습니다만,

이 빌어먹을 UVa는 .end()로 얻는 포인터에서 --연산으로 뒤에서부터 하나씩 전진해오면 RE가 뜨는군요.

이 풀이는 단순합니다.

일단 여기선 귀찮아서 int형으로 해뒀는데,

pos배열처럼 bool형으로 된 크기 n(동전 가치 총합)의 배열을 만듭니다.

이후, 각 동전 가치 부분은 당연히 2명이 나눠가질 수 있는 분할을 만들 수 있고

거기에 두세개 이상의 동전을 합했을때 나눠지는 경우까지 모두 이 pos 배열에 저장해서

그 분할되는 지점만을 true로 둡니다.

이후, half(정 중앙 지점)에서부터 양쪽 어디든지 가장 가까운 true를 찾아내어서

그 때의 두 수의 차이를 출력하면 문제는 해결됩니다.
posted by Lonewolf dlbo

댓글을 달아 주세요

2010.01.14 22:45 Solutions/Dlbo's Solution


니미...

3승을 해야 5판 3선승제의 1승을 얻어내는 거였습니다.

승 수를 이용하는게 아니라,

이긴 사람 수를 카운팅해야 합니다.

-_-;;
posted by Lonewolf dlbo

댓글을 달아 주세요

  1. 아니 이거 말고 디바이딩 코인 풀어ㅋ

2010.01.14 22:32 Solutions/Dlbo's Solution


뭔가 많이 어색합니다.

2의 거듭제곱만 된다는거 찾는데 한참걸렸습니다;
posted by Lonewolf dlbo

댓글을 달아 주세요

2009.10.19 10:43 Solutions/Dlbo's Solution

걍 부피 평균 낸 다음,

부피가 큰 놈이 부피 작은놈꺼 뺏었다고 하면 됩니다.

구두점 안찍어줘서 WA 한번 떴습니다 -_-;
posted by Lonewolf dlbo

댓글을 달아 주세요

2009.10.18 21:49 Solutions/Dlbo's Solution


걍 열심히 돌리는게 답입니다 =ㅁ=...;
posted by Lonewolf dlbo
TAG pku

댓글을 달아 주세요

2009.10.18 21:47 Solutions/Dlbo's Solution


.....

숏코딩입니다. -_-;
posted by Lonewolf dlbo
TAG pku

댓글을 달아 주세요

2009.10.18 21:46 Solutions/Dlbo's Solution


3210 coins는 안풀었군요.

이 문제 소스는 설명할 거리도 없습니다;
posted by Lonewolf dlbo
TAG pku

댓글을 달아 주세요

  1. Favicon of http://klone.tistory.com BlogIcon Mr.K 2009.10.22 08:57  Addr Edit/Del Reply

    왜 coins는 안풀어놓고 ac래 -_-;

2009.10.18 21:44 Solutions/Dlbo's Solution


쉽습니다.

곱셈법이 변태같을 뿐;
posted by Lonewolf dlbo
TAG pku

댓글을 달아 주세요

2009.10.18 21:41 Solutions/Dlbo's Solution


아흠.

간만에 솔루션 올립니다만,

안푼 문제들 다 이미 풀어본 문제인듯;

별거 없고 배열을 이용해서 서로 매치시켜 더해버리면 됩니다 -_-;
posted by Lonewolf dlbo
TAG pku, UVA

댓글을 달아 주세요

2009.06.25 15:46 Solutions/Dlbo's Solution


Unique님의 댓글대로입니다 =ㅁ=~;
posted by Lonewolf dlbo

댓글을 달아 주세요

prev 1 2 3 next