태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

'Coding/C/CPP 삽질기'에 해당되는 글 36건

  1. 2017.07.13 Quick sort
  2. 2016.08.20 Bit 연산 정리
  3. 2016.04.13 가장 넓은 직사각형 구하는 알고리즘 ( O(MN) )
  4. 2016.04.13 printf로 디버깅 하기
  5. 2016.03.30 C++ 컴파일러
  6. 2016.03.17 Lambda function (1)
  7. 2016.03.16 Lambda function
  8. 2016.03.03 짝수만 출력하기
  9. 2015.12.23 Couple
  10. 2014.11.12 사각형 개수 구하기

#include <iostream>

using namespace std;


class CPoint {

public:

void set(int a_, int b_) { a = a_; b = b_; }

bool small(const CPoint &p) {

unsigned long long int la = b;

unsigned long long int lb = p.a;

unsigned long long int lb2 = p.b;

unsigned long long int l = la * lb + lb2;

la = p.b;

lb = a;

lb2 = b;

unsigned long long int r = la * lb + lb2;

return l < r;

}

bool big(const CPoint &p) {

unsigned long long int la = b;

unsigned long long int lb = p.a;

unsigned long long int lb2 = p.b;

unsigned long long int l = la * lb + lb2;

la = p.b;

lb = a;

lb2 = b;

unsigned long long int r = la * lb + lb2;

return l > r;

}

int a, b;

};



void qsort(CPoint* arr, int start, int end) {

CPoint p = arr[(start + end) / 2];

int s = start;

int e = end;


while (s <= e) {

while (arr[s].small(p)) { s++; }

while (arr[e].big(p)) { e--; }

if (s <= e) {

CPoint t = arr[s];

arr[s] = arr[e];

arr[e] = t;

s++;

e--;

}

}


if (start < e) {

qsort(arr, start, e);

}

if (s < end) {

qsort(arr, s, end);

}

}


CPoint p[200001];


int main()

{

int TC = 0;

cin >> TC;


for (int tc = 1; tc <= TC; tc++) {

int N = 0;

cin >> N;

for (int i = 0; i < N; i++) {

cin >> p[i].a >> p[i].b;

}

qsort(p, 0, N - 1);

cout << "# " << tc << " " << N <<  endl;

for (int i = 0; i < N; i++) {

cout << p[i].a << " " << p[i].b << endl;

}

}


    return 0;

}



'Coding > C/CPP 삽질기' 카테고리의 다른 글

Quick sort  (0) 2017.07.13
Bit 연산 정리  (0) 2016.08.20
가장 넓은 직사각형 구하는 알고리즘 ( O(MN) )  (0) 2016.04.13
printf로 디버깅 하기  (0) 2016.04.13
Posted by chobocho

arr[k >> 5] |= (1 << (k & 31));

arr[k >> 3] |= (1 << (k & 7));

'Coding > C/CPP 삽질기' 카테고리의 다른 글

Quick sort  (0) 2017.07.13
Bit 연산 정리  (0) 2016.08.20
가장 넓은 직사각형 구하는 알고리즘 ( O(MN) )  (0) 2016.04.13
printf로 디버깅 하기  (0) 2016.04.13
Posted by chobocho

가장 넓은 직사각형 구하는 알고리즘 ( O(MN) )


/*
From :
http://stackoverflow.com/questions/7245/puzzle-find-largest-rectangle-maximal-rectangle-problem
*/

int findMaxRect (int rect[XSIZE][YSIZE]) {
	int ret = 0;
	unsigned int x = 0, y = 0, k = 0;
	int sum[YSIZE+1] = { 0, };
	int stack[YSIZE][2] = { 0, };
	int stIdx = -1;
	int width = 0;
	int y0 = 0, w0 = 0, tempArea = 0;
	
	for ( x = 0; x < XSIZE; ++x ) { 
		for ( y = 0; y <= YSIZE; ++y ) {
			sum[y] = rect[y][x] ? ++sum[y] : 0;
		}
		sum[YSIZE] = 0;
		width = 0;
		stIdx = -1;
		for ( y = 0; y <= YSIZE; ++y) {
			if ( sum[y] > width ) {
				stack[++stIdx][0] = y;
				stack[  stIdx][1] = width;
				width = sum[y];				
			} 
			else if ( sum[y] < width ) {

				while(1) {
					y0 = stack[stIdx  ][0];
					w0 = stack[stIdx--][1];
					tempArea =  width * (y - y0);
				  
					ret = tempArea > ret ? tempArea : ret;

					width = w0;
					if( sum[y] >= width) break;
				} 
				width = sum[y];
				if ( width != 0 ) {
					stack[++stIdx][0] = y0;
					stack[  stIdx][1] = w0;	
				}
			}
		}
	}	
	
	return ret;
}


'Coding > C/CPP 삽질기' 카테고리의 다른 글

Bit 연산 정리  (0) 2016.08.20
가장 넓은 직사각형 구하는 알고리즘 ( O(MN) )  (0) 2016.04.13
printf로 디버깅 하기  (0) 2016.04.13
C++ 컴파일러  (0) 2016.03.30
Posted by chobocho

#define DEBUG


#ifdef DEBUG

    #define cprintf(...) printf(__VA_ARGS__)

#else

    #define cprintf(...) 

#endif



'Coding > C/CPP 삽질기' 카테고리의 다른 글

가장 넓은 직사각형 구하는 알고리즘 ( O(MN) )  (0) 2016.04.13
printf로 디버깅 하기  (0) 2016.04.13
C++ 컴파일러  (0) 2016.03.30
Lambda function  (1) 2016.03.17
Posted by chobocho
TAG CPP, Debug, printf

무료 C++ 컴파일러



1. 구름 IDE ( https://ide.goorm.io/ )

웹기반 IDE 이며, 기본 사용은 무료 이다.

웹 브라우져만 있으면 손쉽게 다양한 언어로 개발이 가능 하다.




2. C++ shell ( http://cpp.sh )

무료이며, 웹브라우져만 띄우면 짧은 코드를 쉽게 실행 할 수 있다.



3. Cygwin ( http://cygwin.com/install.html )

자세한 설명은 Cygwin 홈페이지를 참고하시면 됩니다.



4. Visual studio Express ( https://www.visualstudio.com/ko-kr/products/visual-studio-community-vs.aspx )

너무 유명하므로 설명은 생략 합니다.


'Coding > C/CPP 삽질기' 카테고리의 다른 글

printf로 디버깅 하기  (0) 2016.04.13
C++ 컴파일러  (0) 2016.03.30
Lambda function  (1) 2016.03.17
Lambda function  (0) 2016.03.16
Posted by chobocho

[ C++ Lambda 함수 설명 ]

https://msdn.microsoft.com/ko-kr/library/dd293608.aspx

https://msdn.microsoft.com/ko-kr/library/dd293599.aspx

http://en.cppreference.com/w/cpp/language/lambda


'Coding > C/CPP 삽질기' 카테고리의 다른 글

C++ 컴파일러  (0) 2016.03.30
Lambda function  (1) 2016.03.17
Lambda function  (0) 2016.03.16
짝수만 출력하기  (0) 2016.03.03
Posted by chobocho
TAG C++, CPP, Lambda

#include <iostream>

using namespace std;


int main()

{

   int num = 2;

  

   auto sum = [](int n) -> int{ return n*n; }(num);

   

   cout << num << " " << sum << endl;

   

   return 0;

}



2 4


'Coding > C/CPP 삽질기' 카테고리의 다른 글

Lambda function  (1) 2016.03.17
Lambda function  (0) 2016.03.16
짝수만 출력하기  (0) 2016.03.03
Couple  (0) 2015.12.23
Posted by chobocho
TAG CPP, Lambda

#include <iostream>

using namespace std;


int main()

{

    for (int i = 0; i < 100; i++) {

       i % 2 ||  cout << i << endl;   

    }

    return 0;

}




'Coding > C/CPP 삽질기' 카테고리의 다른 글

Lambda function  (0) 2016.03.16
짝수만 출력하기  (0) 2016.03.03
Couple  (0) 2015.12.23
사각형 개수 구하기  (0) 2014.11.12
Posted by chobocho
TAG CPP

Couple

Coding/C/CPP 삽질기 2015.12.23 00:42

#include <stdio.h>

#include <stdlib.h>


#define FALSE 0

#define TRUE  1



int IsSheBeautiful() { return (rand() % 101 > 99); }

int IsSheLikeMe()    { return (rand() % 51  > 49); }


int MeetGirl(int count) {

    int amIcouple = FALSE;

    

    // printf ("%d : I meet a girl!\n", count);

    

    if ( IsSheBeautiful() && IsSheLikeMe() ) {

        amIcouple = TRUE;

    }

    

    return amIcouple;

}


int Process() {

    int amIcouple = FALSE;

    int count = 0;

    

    while ( amIcouple == FALSE ) {

        amIcouple = MeetGirl(++count);      

    }

    printf ("I met %d girls\n", count);

    return amIcouple; 

}


int main(int argc, char **argv) {

    printf("%s\n", Process() == TRUE ? "I am not a single!" : "I am a sigle");

    return 0;

}


'Coding > C/CPP 삽질기' 카테고리의 다른 글

짝수만 출력하기  (0) 2016.03.03
Couple  (0) 2015.12.23
사각형 개수 구하기  (0) 2014.11.12
Mirror  (0) 2014.10.27
Posted by chobocho
TAG CPP

#include <stdio.h>


#define BLOCK 1

 

#define SIZE 5


int mirror[SIZE][SIZE] = {

    { 0, 0, 0, 0, 0},

    { 0, 1, 1, 1, 0},

    { 0, 1, 0, 1, 0},

    { 0, 1, 1, 1, 0},

    { 0, 0, 0, 0, 1},    

};


int process(void);

int checkIsRect(int x, int y);


int main (int argc, char **argv) {

    

    int count = process();

       

    printf ("%d\n", count);

    

    return 0;

}


int process(void) {

    int count = 0;

    int i = 0, j = 0;

    

    for ( i = 0; i < SIZE; i++) {

        for ( j = 0; j < SIZE; j++ ) {

            if ( mirror[i][j] == BLOCK ) {

                count += checkIsRect(j, i);

            }

        }

    }

    

    return count;

}


int checkIsRect(int posX, int posY) {

    int count  = 0;

    int isEnd  = 0;

    int x = posX;

    int y = posY;

    int width  = 0;

    int height = 0; 

    

    int x2 = posX;

    int y2 = posY;

    //int width2  = 0;

    //int height2 = 0; 

    

    /* Check Right -> Check Down */

    do  {

        mirror[y][x] = 0;

        x++;

        width++;        

    } while (x < SIZE && mirror[y][x] == 1);

    x--;

    

    do {

        mirror[y][x] = 0;    

        y++;

        height++;

    } while (y < SIZE && mirror[y][x] == 1);

    y--;

    

   /* Check Down -> Check Left */

    do {

        mirror[y2][x2] = 0;    

        y2++;

        //height2++;

    } while (y2 < SIZE && mirror[y2][x2] == 1);

    y2--;

    

    do {

        mirror[y2][x2] = 0;    

        x2++;

        //width2++;

    } while (x2 < SIZE && mirror[y2][x2] == 1);

    // Already mirror[y2][x2] == 0 

    // Because x == x2, y == y2

    // No need to x2--;

    

    if ( x == x2 && y == y2 && width >= 3 && height >= 3 ) {

        count = 1;

    }

    

    //printf ("x: %d y: %d x2: %d y2: %d width: %d height: %d \n", x, y, x2, y2, width, height);              

    

    return count;

}



'Coding > C/CPP 삽질기' 카테고리의 다른 글

Couple  (0) 2015.12.23
사각형 개수 구하기  (0) 2014.11.12
Mirror  (0) 2014.10.27
대칭행렬  (0) 2014.10.24
Posted by chobocho