본문 바로가기

For all category

R.A.M. #1. 무리수 √2의 값을 구해보자! : Stage 1 부제 : 미정 Location of Roots Theorem Let I = [a, b] and let f : I → R be continuous on I. If f(a) 0 > f(b), then there exists a number c ∈ (a, b) such that f(c) = 0. (위 내용은 INTRODUCTION TO REAL ANALYSIS 3/e에서 일부 발췌했음을 알려드립니다) 안녕하십니까 Mr. K입니다 지난 주까지 무사히(?) '재귀 vs. 반복'의 포스팅을 끝내고 새로운 주제를 가지고 돌아왔습니다 포스팅 계획서에 언급해두었던 '무한의 범주에 있는 것을 유한하게 구현'하는 것을 하려고 합니다 그 첫 대상은 '무리수'가 되겠습니다 무리수라는.. 더보기
정보올림피아드 모험가 모두 풀어보셨을 문제입니다. ..................(생략)................."두 개의 열쇠의 숫자를 합해서 신전의 문 위에 있는 숫자와 일치하는 열쇠의 쌍을 찾아서 꽂으면 문이 열릴 것이다" 입력 첫 줄에는 열쇠의개수,문의 번호 둘째줄엔 열쇠들의 숫자가 입력됩니다. 출력 키의쌍을 출력하고 다음줄에 열쇠 쌍의 개수를 출력한다 입력예시 12 13 50 10 36 4 48 1 100 9 12 72 13 20 출력예시 (1,12)(4,9) 2 예 참쉽죠? 키의 값들을 오름차순으로 정렬하고 맨앞과 맨뒤의 값을 더한 값이 문의 번호보다 크다면 배열에서 가장 큰 값을 버리고,문의 값보다 작다면 배열에서 가장 작은 값을 버립니다. 소스 #include #include int arr[100],n,.. 더보기
시험 대비 긴급 공지. 잘 생각해보니 Dizies님과 zfanta님은 시험기간이군요 _-; 나머지 멤버들은 한달 후에 중간고사 기간이라... 시험 기간에 대한 대책이 미흡했던 것 같습니다. 시험 기간 등으로 인해 시간이 부족할 경우는 미리 자기 포스트에 "언제부터 언제까지 어떠한 사정으로 쉽니다." 라고 미리 표기해 주시면 거기에 맞춰 문제 업데이트나 포스트 일정을 변경하겠습니다. 더보기
재미있는 소스코드 하나 가져왔습니다. #include #include using namespace std; int main() { __int64 tc, num, i, j, x, k, l; __int64 a, b, c; cin>>tc; l = 1390000; while(tc--) { cin>>num; for (i = 1; ;i++) { a = (int)log10((double)i); b = (int)pow(10., (double)a); k = (a * b + (1 - b)/9) + (i - (b - 1)) * (a + 1); if (num = x * ((int)log10((double)x) + 1); x *= 10) { num -= x * ((int)log10((double)x) + 1); } x /= 9; a = (int)log10((dou.. 더보기
객체지향 이야기 1. 객체지향이 뭐야? 갑작스레 시작하는 객체지향 이야기. 그것도 시리즈물 이에요 -_-; --------------------------------------------------------------------------------------------------- 처음 프로그래밍이 탄생한 순간, 기계에 천공카드를 원하는 규칙에 맞춰 뚫어서 넣어 컴퓨터를 가동하던 그 때. 무식하게 느린 컴퓨터이지만 복잡하고 귀찮은 계산들을 손쉽게 처리해 주었기에, 수많은 사람들이 열심히 천공카드에 하나 하나 구멍을 뿅 뿅 뚫어가며 프로그램을 만들었습니다. 이 후, 기계어 단위로 0, 1을 직접 우겨넣다 못해, 어셈블리 언어가 생겼지요. 정말 단순했습니다. 그냥 순서대로 컴퓨터가 해야 할 일을 프로그래머가 알아먹을 수 있도록 기계어와 1 :.. 더보기
PKU 1844. Sum. AC 네요 #include int main(void) { int temp,sum=0,count=0; scanf("%d",&temp); while(1){ if((sum >= temp) && (sum-temp)%2==0) break; else{ count++; sum=sum+count; } } printf("%d",count); return 0; } 음, 다행이도 AC를 받았네요 저의 경우는 우선 덧셈을 해서 입력값보다 커야하고, 더해진값과 입력값의 차이가 짝수인 경우를 판별하여 확인했습니다. 우선 1부터이므로 -가 붙어도 증가하지 않으므로 입력값보다 커질때까지 더하였고, -가 붙을때 더하였던 값이 취소되고 거기에서 -가 되므로 빠지는 값은 2n일것입니다. 예를 들어 1+2와 -1+2의 차이는 2*1 즉 2n의 차이가.. 더보기
PKU 1844, Sum. AC #include int i,in,sum; int main() { do { scanf("%d",&in); }while(in100000); for(i=sum=0;;i++) { sum+=i; if(sum>=in && (sum-in)%2==0) { printf("%d\n",i); break; } } } Run ID User Problem Result Memory Time Language Code Length Submit Time 4114901 jht009 1844 Accepted 204K 0MS C 296B 2008-09-23 15:25:49 매트릭스 포기해도 되나요???????????????????????????????? 헣헣헣 GG 더보기
PKU 문제를 구경하다 문득 발견한 것 UVa 108의 Maximum Sum은 PKU 1050의 To the Max와 같습니다 제목만 다르고 내용은 같음; 더보기
PKU 1844. Sum. [판정:AC] #include int sigma( int k ) { return k*( k+1 )/2; } void main() { int s; int sum; int i; scanf("%d", &s); for( i = 1; ; i++ ) { sum = sigma(i); if( ( sum >= s ) && ( sum%2 == s%2 ) ) { printf("%d\n", i); break; } } } 이번 문제는 '저번에 비해' 너무 쉬워서 미칠 지경이군요 -_-; 풀이는 이렇습니다 우선 수열 {Sn}을 정의하는데, 'Sn = 1부터 n까지의 합'이라고 합시다 그러면 이 수열은 아래와 같은 값을 갖는데, 한가지 규칙이 있습니다 S1 = 1, S2 = 1 + 2 = 3, S3 = 1 + 2 + 3 = 6, S4 = 1 +.. 더보기
포스팅 계획서입니다... 에 안녕하세요. 테슬라라고 합니다. 글이 잘 올라갈지 모르겠네요. 추천을 받긴 했지만, 아직 미숙해서 상당하게 어설플거라 생각해요... 음 그래도 열심히 해보도록 노력하겠습니다... 저는 앞으로 크게 잡아 언어 부분과 기타 여러가지 수업시간에 나온 문제쪽도 올려볼까 생각중입니다... 아마 C나 자료구조 부분같은 것을 쓰겠지요... 사실 저도 막 배우는 입장이라 잘하지 못해서요. 그럼 부족하지만 앞으로 잘 부탁 드리겠습니다... 더보기
PKU 1844. Sum. AC get!~ #include int main() { int i, j, sum = 0; scanf("%d", &i); for (j = 1; j = i) { if (!((sum - i) % 2)) { printf("%d\n", j); break; } } } return 0; } 흐음. 이번에도 쉬운 문제이지요? 1부터 N까지 숫자를 나열해 두고, 각 숫자마다 부호를 아무렇게나 둔 다음, 부호까지 붙인 수들을 합해서 S가 되게 만들되, 그 N중 최소를 출력하는 겁니다. 제 솔루션은 간단합니다. 1부터 N까지의 합을 그냥 구합니다. -_-; 이 때 1부터 N까지의 합이 S보다 크다면, S는 1부터 N까지의 숫자중 몇개를 뽑아서 만들 수 있.. 더보기
PKU 1844. Sum. 합!? Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4816 Accepted: 3123 설명 1부터 N까지의 자연수를 생각해 봅시다. 여기에 부호를 붙여보도록 하지요.(+나 -). 그리고 그대로 더해버려서 합계 S를 만들어 봅시다. 문제는 S를 이루기 위한 이 자연수들의 최소 갯수를 구하는 것입니다. 1부터 N까지 모두 쓰되 부호는 마음대로 붙여서 S를 만들기 위해 가장 적은 개수의 숫자로 S를 구성할 수 있게 합시다. 주어진 합 S에 대하여, 1부터 N까지 부호는 마음대로 붙여 최소의 N이 되는 경우를 구해 N을 출력하세요. 입력 한 줄만 입력받되, 합인 S를 0보다는 크고 100000보다는 작은(0< S 더보기
PKU 1844. Sum. Sum Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4816 Accepted: 3123 Description Consider the natural numbers from 1 to N. By associating to each number a sign (+ or -) and calculating the value of this expression we obtain a sum S. The problem is to determine for a given sum S the minimum number N for which we can obtain S by associating signs for all numbers between 1 to N. For a.. 더보기
새로운 멤버가 합류했습니다. 자... 한분만 더 모시면 이제 팀블로그가 쉴 날 없이 재미있게 돌아가겠군요 -_-! 금요일 포스트 까먹고 자버린 리턴군은 열심히 포스트를 작성중이랍니다! -_-ㅋㅋㅋㅋㅋ 이번에 새로 참가한 분은 '테슬라'라고 불러달라는 군요. 앞으로 월요일에 연재할 예정입니다. 다들 즐거운 한주 되시길! 더보기
PKU 1145, UVa 112. Tree Summing. [판정:AC & TLE] #include #include #define SIZE 2000 int isInt( double x ) { if( floor(x) == ceil(x) ) return 1; else return 0; } int isInHere( int x, int here[] ) { int i; for( i = 0; here[i] != -1; i++ ) { if( here[i] == x ) return 1; } return 0; } void pullOut( int pullThis, double list[], int *endKey, int keyList[], int etcList[] ) { int i; int del = 0; for( i = pullThis; i < *endKey; i++ ) { list[ i-2 ] = l.. 더보기
PKU 3685. Matrix. AC get! #include #include int main() { int n; __int64 N, M; __int64 min, max; __int64 x, j; __int64 sum; __int64 det, cal_1, cal_2; const __int64 w = 100000; scanf("%d", &n); while (n--) { scanf("%I64d%I64d", &N, &M); max = w * w * 10; min = -1 * max; while (min < max) { x = (min + max) / 2; if (x == max) { x--; } sum = 0; for (j = 1 ;(j = cal_1) { sum += (cal_2 - cal_1 + 1); } } if (sum < M) { min = x .. 더보기
[사과문] 우선 석고대죄하죠 -_-;;;;;;;;; 잘못했습니다. 문제가 단순해 보이길래 '적당히 까다롭나..?' 싶었었죠. 근데 풀다보니 아니더군요. 실수했습니다. 다시는 안그럴게요 ㄱ- 담부턴 선정 적당적당한거 해보겠습니다. 더보기
PKU [3685]. Matrix. [AC] #include #include using namespace std; __int64 w = 100000; int main() { int n; scanf("%d", &n); while(n--) { __int64 N, M; scanf("%I64d %I64d", &N, &M); __int64 max = w * w * 10; __int64 min = -max; while(min < max) { __int64 x = (min + max) / 2; if(x == max) { x--; } __int64 sum = 0; for(__int64 j=1 ; (j 더보기
규칙을 찾아봅시다 Reuent님의 소스로 행X행의 행렬에서 열(A,B,C...AX)번째 원소를 정리해봤습니다. 규칙이 보이시나요? 전 안보여요 ㅜㅜㅜㅜㅜㅜㅜ 더보기
[PKU 3685. Matrix] 줄여서 생각해봅시다 우리가 문제에서 생각해야 하는 행렬의 최대 차수는 무려 5만차입니다 (여기서 말하는 차수는 행렬의 size를 의미합니다) 그리고 행렬 내의 i번째 행, j번째 열의 원소인 a_ij의 값은 i^2 + 100000*i + j^2 - 100000*j + i*j 이지요 (이하 a_ij는 (i, j)로 표기하겠습니다) 약간 고쳐서 간단히 만들면 (i+j)^2 - i*j + 100000*(i-j)가 됩니다 그런데 여태까지 ↘이 방향으로 오른쪽 위에서부터 왼쪽 아래까지 읽어내려오는 방식은 (즉, n차 행렬에 대해 (1, n), (1, n-1), (2, n), (1, n-2), (2, n-1), (3, n), (1, n-3), …, 이 순서로 읽어내려오는 ) 행렬의 차원이 커지면 저 순서로 읽을 수 없게 되고 말아버립.. 더보기
PKU 3685 발견사항 보고. 입력에 50000 1이랑 50000 2 넣어보세요. 기존 방식처럼 오른쪽 위에서부터 대각선 오른쪽 아래로 내려가는걸 반복하는 방식으로 풀었다면 두 입력에 대한 값이 같습니다. ㅡ.,ㅡ... 아래는 i를 1부터 5까지, j는 49996부터 5만까지 연산한 결과값입니다. -2499849987 -2499849993 -2499849997 (-2499849999 -2499849999) -2499699988 -2499699993 -2499699996 -2499699997 -2499699996 -2499549987 -2499549991 -2499549993 -2499549993 -2499549991 -2499399984 -2499399987 -2499399988 -2499399987 -2499399984 -24992.. 더보기
크롬 쓰고 있는데 얼마 전에 크롬 받아서 쓰고 있는데 나름 빨라서 괜찮더군 아직 ActiveX 지원 안한다고 하던데 그거 나중에 지원하게 바뀐다고 들었으니 상관없을 것 같고 무엇보다 UVa 홈페이지가 정상적으로 뜨는게 좋군 ㅋ 얼마 전에 크롬 사용후기(?) 중에 싸이월드에서 이걸(크롬) 파폭처럼 인식하고 있다고 스샷 올려서 보여주고 했었는데 그런 현상의 일종이려나? -_-; 더보기
이번 문제.... 아직 AC 받은건 아닌듸요... 너무 피로해서 지금 죽을꺼 같아서 솔루션 만들어놓고도 코드로 못옮기고 있는데... 이거 확인해 보셨나요? 식이 i^2 + 100000i + j^2 - 100000j + ij 잖습니까... i만 1 증가시켜 비교해 보면... i^2 + 100000i + j^2 - 100000j +ij와 i^2 + 100000i + j^2 - 100000j +ij + 2i + j + 100001이 되어서 i 증가시 2i + j + 100001만큼 증가함을 알 수 있지요. j만 증가시켜도 그렇겠지요? (1,1)의 값이 3이니 굳이 저 연산 안하고 증감에 따른 차이만큼만 더해도 나와요. -_-; 더보기
Recursion vs. Iteration : Round 3 부제 : 말이나 못하면 밉지나 않지. (?) 자, 이번에는 "Round 1"에서의 피보나치 수열을 나름 "개량된" 재귀함수로 구현해보도록 하겠습니다 ... // #include 외 unsigned improvedRecursion( unsigned, unsigned * ); void main() { ... // 선언부 unsigned count; unsigned *fibonacciSequence; cout > count; fibonacciSequence = ( unsigned * )calloc( 1+count, sizeof( unsigned ) ); ... // 시간 측정 시작 improvedRecursion( count, fibonacciSequence ); ... // 시간 측정 끝 free( fibo.. 더보기
PKU 3685. Matrix. [판정:WA] #include unsigned sigmaInc( unsigned ); unsigned sigmaDec( unsigned, unsigned ); unsigned sumOfGroup( unsigned, unsigned ); int rowIndex( unsigned, unsigned ); int columnIndex( unsigned, unsigned ); void main() { int trial; int i; unsigned dimension, searchOrder; scanf("%d", &trial); printf("\n"); /* skip a line */ for( i = 0; i < trial; i++ ) { unsigned j; unsigned beforeSum; double ithRow, jth.. 더보기
재귀함수랑 친해지기 : 파스칼의 삼각형 파스칼의 삼각형 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 먼저 첫번째 줄에는 숫자 1을 쓴다. 그 다음 줄을 만들려면, 바로 위의 왼쪽 숫자와 오른쪽 숫자를 더한다. 예를 들어, 네번째 줄의 숫자 1과 3을 더하여 다섯번째 줄의 4가 만들어진다. -wikipedia 왼쪽 위,오른쪽 위에 있는 수를 더해서 만들어갑니다. 프로그램으로 만들기 위해 y(행),x(열)좌표로 나타내면 0,.. 더보기
행렬이 뭐에요???????????????????? 그냥 배열에 i*(i+100000)+j*(j-100000)+i*j 넣고 찾으면 되는건가요? 더보기
PKU [3685]. Matrix. Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 2290 Accepted: 415 Description N by N 행렬 A가 주어진다. 그 중 이 행렬의 i행 j열 성분인 Ai j 는 다음과 같은 방정식을 만족한다. : i 2 + 100000 × i + j 2 - 100000 × j + i × j. 당신은 이 행렬에서 M번째로 작은 값을 찾아야 한다. Input 첫번째 행의 입력은 테스트 케이스의 수이다. 각 테스트 케이스는 두 정수 N(1 ≤ N ≤ 50,000) 과 M(1 ≤ M ≤ N × N) 으로 구성되며, N과 M의 입력 이전엔 공백이 존재한다. Output 각 테스트 케이스 별로 답을 찾아내서 한 줄에 출력하라. Sampl.. 더보기
PKU [3685]. Matrix. Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 2290 Accepted: 415 Description Given a N × N matrix A, whose element in the i - th row and j - th column Ai j is an number that equals i 2 + 100000 × i + j 2 - 100000 × j + i × j, you are to find the M - th smallest element in the matrix. Input The first line of input is the number of test case. For each test case there is only on.. 더보기
으흠... Reuent군이 번역할 차례인데... 사라졌군요 ㄱ- 더보기