int a[1024][1024];int loop(int n, int i, int j) { if(n==1) { return a[i][j]; } else { n>>=1; int x,y,z,t; x=loop(n,i,j); y=loop(n,i+n,j); z=loop(n,i,j+n); if(x>y) {t=x;x=y;y=t;} if(x>z) {y=x;x=z;} else if(y>z) y=z; z=loop(n,i+n,j+n); if(x>z) {y=x;x=z;} else if(y>z) y=z; return y; }}int main() { int n,i,j; scanf("%d",&n); for(i=0;i 풀이 : 재귀, 분할정복 loop을 이용합니다.n >=2 즉 2*2 matrix 까지는 네 곳..
void loop(int n, int m) { if(n==0) { printf("%c",(m>0)?'-':' '); return 0; } loop(n-1,m); loop(n-1,0); loop(n-1,m); return 0;}int main() { int n; while(~scanf("%d",&n)){ loop(n,1); printf("\n"); }} 풀이 : 재귀, 분할정복 0. n을 입력받습니다 EOF가 c언어에서 -1 0xFFFF 인 것을 이용하여 ~ not 비트 연산을 하여 EOF가 입력받으면 입력을 종료합니다. 1. 재귀를 사용합니다. 인자 n : 0이되면 출력을 합니다. m : 1이면 '-', 0이면 ' ' 을 출력하도록 합니다. n>0 인 경우 loop를 ..
#include #define M 1000000007#define m 600000#define p 257long long hash(int s) { long long a=0,b=1,c=0,i=4; while(i--) { c=s&0xFF; a=(a+c*b)%M; b=(b*p)%M; s>>=8; } return a;}int main() { int n,i,a,b,c,t[m]={},T[m]={}; long long v; scanf("%d",&n); for(i=0;i 풀이 : key의 중복이 없는것을 이용한 해쉬를 이용한 map 1. 해쉬값 만들기문자열을 해쉬값으로 만들었을 때는, 한 문자씩 -'a'+1 을 하면서 값을 구했다면, 정수형의 경우 & 1111 (비트).. 이런식으로 1로 이루어진 값과 and..
#include #include #include #define P 37#define M 1000000007#define m 100003#define L long longL calHash(char * s) { L a=0,b=1,c; while(*s) { c=(*s-'a'+1); a=(a+c*b)%M; b=(b*P)%M; ++s; } return a;}L fast(L base, L exp, L mod) { L a=1; while(exp>0) { if(exp&1) a = (a*base)%mod; base = (base*base)%mod; exp/=2; } return a;}int main(void) { L v, invP; int i,..
#include #include int main(void) { int n,c=0,e=0,i,h; char s[101],d[100][95]; scanf("%d",&n); while(scanf("%s",s)) { int l=strlen(s); char *a=s+l-6; if(!strcmp("Cheese",a)) { s[l-6]=0; h=0; for(i=0;i3)?"yummy":"sad");} 풀이 : string.h 사용while(scanf("%s",s)) 이런식으로 공백으로 구분된 여러 문자열들을 끊어서 받아낼수 있습니다. 물론 끄는 것은 불가하므로 이전에 입력받았던 n을 이용하여 반복문을 종료하면 됩니다. 먼저 입력받은 문자열의 길이를 구한다음, 마지막 부분이 "Cheese" 인지를 확인..
#include #include #include #define P 37#define M 1000000007#define m 64321int n,i,j,h,v,l;char txt[101],ext[101],*sTable[m];int nTable[m]={},sortCnt=0;int cmp(const void *a, const void *b) { //해쉬값을 이용하여 문자열을 불러온 다음 return strcmp(sTable[*(int*)a],sTable[*(int*)b]); //사전 순 비교}void hash(char * s) { //해쉬값 만들기 long long a=0,b=1; l=0; while(*s) { long long c=(*s-'a'+1); a=(a+c*b)%M; b=(b*P)%M; ++s..
#include #include int main() { int n,i,j,k,p=0,q,e=0; scanf("%d",&n); char*a[n],*b[n],*c[n],x[51],y[51]; int d[n]; for(i=0;i 풀이 : map (key - value, value) p : map 에 있는 key 의 개수입니다. 0부터 시작합니다.q : map에 있던 key와 같이 같을 경우 1 그렇지 않으면 0 입니다.e : key개에 정확히 두 개의 value를 가지고 있는 것들의 개수입니다.n : 입력받는 key - value 쌍의 개수입니다.i,j,k : 반복문에서 사용할 index 입니다. x,y : key-value를 문자열 쌍으로 받을 때 사용하는 문자 배열입니다.a,b,c : 각각 key, val..
#include int main(void) { int n,c,i,j,x,y,z,g,p=0; scanf("%d %d",&n,&c); int a[n][3]; for(i=0;i>1; while(1) { if(!(g&1)) ++g; for(i=g;i=0;j-=g) { if(z>a[j][2] || (z==a[j][2] && y>=1; } for(i=0;i 풀이 : 집합과 맵 map을 구현하려면 red-black tree을 구현해야 하나, 그정도의 실력은 되지 않으며, 자료가 별로 주어지지 않기 때문에 배열로 가짜 map을 만들었습니다.(탐색시간이 O(n)으로 비효율적입니다) 1. n,c 을 입력받습니다.2. a[n][3] 이라는 배열을 만듭니다. 0번째는 값, 1번째는 들어온 순서 index, 2번째는 ..
#include #include int cmp(const void*a, const void*b) {return(*(int*)a-*(int*)b);}int main() { int n,i,x,y=0,z; scanf("%d",&n); int a[n],b[n]; for(i=0;i 풀이 : 정렬 0. x좌표 값과, y좌표 값을 각각 다른 배열에 저장합니다.1. 오름차순으로 정렬을 합니다.2. 같은 좌표가 연속적으로 2번나온다면, 두 점을 지나며 x 또는 y 축에 평행한 선 1개가 있음을 알 수 있습니다. (같은 좌표가 3개이상이더라도, 직선은 1개이므로 그 이후에 중복되는 값은 무시하면 됩니다)3. 직선의 개수를 출력합니다. 위 코드에서 z의 역할1 1 1 ... 이런 식으로 같은 좌표가 연속적으로 3개 이상이 ..
- Total
- Today
- Yesterday
- 최소 스패닝 트리
- BFS
- 누적 합
- 브루트포스
- 기하학
- 누적합
- 1835
- 1835번
- union
- java
- 오프라인 쿼리
- 백준
- 덱
- 세그먼트 트리
- C++
- 그래프
- 정렬
- XOR
- Lazy Propagation
- PASCAL
- DFS
- Krustal
- 스택
- 플로이드
- 그리디
- 최대공약수
- C언어
- DP
- Segment Tree
- find
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |