var t,n,m,i,j,a,b:word;s:string;beginreadln(t);j:=0;repeatreadln(n);readln(s);j+=1;m:=length(s)-4;a:=0;b:=0;i:=1;while i 풀이 's', 'h', 'e', 'e', 'p', ' ' 또는 's', 'h', 'e', 'e', 'p', \0 의 개수를 구하는 문제입니다. b 가 0 이면, 특정 단어가 찾고자 하는 건지 판단합니다!아니라면 b=1로 바꾸고 새로운 단어가 온다는 것을 알려주는 ' ' (공백, blank) 문자가 올때까지 i 을 1씩 증가시킵니다.' '을 만나면 다시 b=0으로 바꾼다음 새로운 문자가 찾고자 하는게 맞는지 판단합니다. 주의 할 점 : 띄어쓰기 2줄!!!, sheepsheep 이건 shee..
var n,i:word;a,d:array[0..999]of word;beginread(n);for i:=0 to 999 do d[i]:=0; for i:=1 to n do begin read(a[i]);d[a[i]]+=1;end;for i:=1 to 999 do d[i]+=d[i-1];for i:=1 to n do writeln(1+d[a[i]-1]);end. 먼저 들어온대로 순서를 매기는 문제입니다.단 동시에 들어온 경우 (ex 1등 2명, 2등 1명)2등은 존재하지 않으며 3등이 됩니다. 풀이1. 배열 a는 입력받은 수를 순서대로 저장, 배열 d는 1~1000 수가 얼마나 입력됬는지를 저장2. d[i] += d[i-1] 을 반복합니다 (누적합), 이것을 해야 자신 앞에 얼마나 많이 있는지 확인이 가능..

var a,b,c,d:int64;begind:=0;read(a,b,c);if (c mod 2)=1 then c-=1;if b=0 then d:=3*c div 2else if c>1 then begin d:=(b-1)*2+5; d+=3*(c-2)div 2;end;if a>0 then d+=a*2;write(d);end. 풀이 1. Corner 블럭 짝수개를 취합니다.2. S-tile 은 Corner 블럭이 2개가 있다면 연결할 수 있습니다. 중요한것은 Corner 블럭 2개가 있다면 반드시 그 사이에 S-tile 블럭을 끼어넣는것이 좋습니다.또한 S-tile 끼리 서로 연결한 다음 양 끝쪽에 Corner을 붙이면 됩니다. (S-tile - 1)*2 + 5 만큼 증가시켜줍니다.만약 짝수개의 Corner ..

#include int main() { int n,m,a,b,i,j; scanf("%d %d",&n,&m); b=(n*m)&1; for(i=1;i풀이 : 애드 혹https://www.acmicpc.net/problem/33707메추리알을 집지못하더라도 인접한 메추리알의 경우 주변으로 이동하는 성질을 이용하여, 위에서 아래로, 왼쪽에서 오른쪽으로만 집기를 시도해도, ⌊(n*m)/2⌋ 만에 메추리알을 집는 것이 가능합니다. 1) n*m 이 짝수인 경우 : (1,1) 부터 시작합니다. +2 씩 오른쪽으로 이동하되, 영역을 침범하면 아래로 내려갑니다.아래로 내려가선 (2,1)로 시작하는 것이 아닌 (2,2)로 시작합니다. 만약 3번째로 내려간다면 다시 (3,1)부터 시작하면 됩니다. ... 이를 반복합니다. ..

#include#define f fflush(stdout);#define s(x) scanf("%d",&x);main(){int n,a,b; s(n)printf("? 1\n");f s(a)printf("? %d\n",n);f s(b)printf("! %d\n",a==b?0:a>b?-1:1);}풀이 : 애드 혹 오르막길이 많으면 1내리막길이 많으면 -1같다면 0 이다. 채점기에게 물어보면서, 어떤구간은 저지대(0) 인지 고지대 (1) 인지를 물어보면서 해결해나가는 문제이다. 굳이 중간이 어떤 상태인지를 물어볼 필요는 없다. 처음과 끝만을 가지고, 오르막길이 더 많은지 내리막길이 더 많은지를 알 수 있기 때문이다. 1) 시작과 끝의 고도가 같다면오르막길 개수 = 내리막길 개수 2) 시작 부분의 고도가 더 높..

var n,m,a,b,i:int64;v:array[1..200000]of byte;beginreadln(n,m);for i:=2 to n do v[i]:=0;v[1]:=1;for i:=1 to m do beginreadln(a,b);if a>b then v[a]:=1 else v[b]:=1;end;for i:=2 to n do if v[i]=0 then begin v[1]:=0;break;end;if v[1]=0 then write('NO')else write('YES');end.풀이 : 그래프 https://www.acmicpc.net/problem/33706 만약 1-2-4-3 이라는 그래프가 있다면 위의 조건을 만족하지 않습니다. (1에서 3으로 가는 것보다 1에서 4로 갈때의 가중치가 반드시 작..

#include int main(void) { int n,m,i,a[200001]={},b; scanf("%d",&n); for(i=1;i=n) b=0; else { for(i=1;i=i || (a[n]-a[n-i])*2>=i) {b=1;break;} if(i==n+1) b=2; } printf("%d",b);}풀이 : 누적합 https://www.acmicpc.net/problem/33705 여기서 중요한 것은 내쫓는 것을 최대 2번까지만 하면 반드시 1번이 마스코트로 뽑힐 수가 있습니다. 0번 : 입력받은 데이터들 중 1이 ⌈m/2⌉ 이상이면 됩니다.1번 : 1번만 내쫓는 경우는 2가지로 볼 수 있습니다. 양쪽 끝단 중 하나에서 부터 시작하여 범위를 지정 양쪽 끝단..
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 까지는 네 곳..
- Total
- Today
- Yesterday
- Lazy Propagation
- 오프라인 쿼리
- find
- 구현
- 브루트포스
- java
- 그리디
- BFS
- 1835번
- DFS
- XOR
- C++
- union
- 그래프
- 스택
- Segment Tree
- 덱
- C언어
- 기하학
- 문자열
- 세그먼트 트리
- PASCAL
- 정렬
- 백준
- 누적합
- Krustal
- 누적 합
- 1835
- DP
- 최소 스패닝 트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |