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..
import sysx = sys.stdin.read().splitlines()d={}c=0for y in x: c+=1 if y in d: d[y]+=1 else: d[y]=1d=sorted(d.items())for y,z in d: print("%s %.4f"%(y,(100*z)/c))풀이 : map (key-value) map에 없던 key라면 value값을 1로 한 채로 집어넣습니다.map에 있다면 value값을 1증가시킵니다.또한 입력받은 문자열의 개수도 구해놓습니다. map을 사전순으로 key를 정렬한다음이름과 이때의 나무가 차지하고 있는 %를 소수점 네자리까지 출력하면 됩니다. https://www.acmicpc.net/problem/4358
a = input()b = len(a)def f(x): c=set() for y in range(b-x): c.add(a[y:x+y+1]) return len(c)d = 0for x in range(b): d+=f(x)print(d) 풀이 : set (집합) python 의 set은 중복이 아닌 값들로만 이루어져 있습니다.즉 처음 입력받은 문자열을 쪼개서 set에 집어넣으면 자연스레 중복이 아닌 값들만 남게 되고, 이 set의 길이가 중복이 아닌 문자열들의 개수임을 알 수 있습니다. 여기서는 함수를 사용하여특정 길이끼리만을 비교하도록 했습니다. (길이가 1인것들, 길이가 2인것들,... 끼리만 서로 비교)이렇게 해야 속도가 더욱 빨라집니다. https://www.acmi..
var n,m,i,j,k,f,p:int64;a:array[1..2000]of string;x,y,z:string;beginp:=1;a[1]:='ChongChong';readln(n);for i:=1 to n do beginreadln(z); //문자열 두개 입력받기m:=length(z);f:=0;x:='';y:='';for j:=1 to m do begin //문자열을 공백기준으로 두개로 나누기if z[j]=' ' then begin f:=1;endelse begin if f=0 then x+=z[j] else y+=z[j];end;end;f:=0;k:=0;for j:=1 to p do begin //춤을 추는 사람이 있는지 확인 if x=a[j] then f+=1; if y=a[j] then k+=1;..
- Total
- Today
- Yesterday
- java
- 그래프
- Segment Tree
- 세그먼트 트리
- 1835번
- 최소 스패닝 트리
- XOR
- PASCAL
- find
- 플로이드
- 정렬
- union
- 누적 합
- Lazy Propagation
- 브루트포스
- 덱
- Krustal
- 그리디
- BFS
- 1835
- DP
- 기하학
- C언어
- 백준
- 스택
- 최대공약수
- 오프라인 쿼리
- 누적합
- DFS
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |