-
[BOJ] 2812 : 크게 만들기
2812 : 크게 만들기 풀이 토막 나며 부서진 나의 여러 기대는 공중에 날려 사라져가고 딱딱한 구름 밑에서 벅찬 무게를 견디며 혼자 그렇게 작아져 갔다 코드 #include <cstdio> int n, k, pos; char s[500005]; int main() { scanf("%d %d %c", &n, &k, &s[0]); pos = 1; for (int i = 1; i < n; i++) { scanf("%c", &s[pos]); while (k && pos && s[pos-1] < s[pos]) { s[pos-1] = s[pos]; s[pos] = 0; k--; pos--; }...
-
[BOJ] 2842 : 집배원 한상덕
2842 : 집배원 한상덕 풀이 parametric search로도 풀릴 것 같은데 나는 투포인터로 풀었다. 높이가 될 수 있는 후보는 1000000개이지만 주어지는 그리드의 크기가 50*50이 최대이므로 많아야 2500개 후보가 있을 수 있다. 주어진 높이들을 정렬한 다음, 투포인터로 구간을 잡아 dfs를 돌려주자. 코드 #include <cstdio> #include <vector> #include <cstring> #include <algorithm> using namespace std; const int dx[] = { 0,0,-1,1,-1,-1,1,1 }; const int dy[] = { -1,1,0,0,-1,1,-1,1 }; int n, sx, sy, k, b[55][55], chk[55][55]; char a[55][55]; vector<int>...
-
[BOJ] 15368 : Birokracija
15368 : Birokracija 풀이 트리에 존재하는 모든 노드에 대해, 각각의 노드에서 루트까지의 거리를 더하는 문제이다. 음… 그냥 짜면 된다. 코드 #include <cstdio> int n, par[200002], cnt[200002]; long long ans[200002]; int main() { scanf("%d", &n); for (int i = 2; i <= n; i++) scanf("%d", &par[i]); for (int i = n; i >= 1; i--) { ans[par[i]] += ++ans[i] + ++cnt[i]; cnt[par[i]] += cnt[i]; } for (int i = 1; i <= n; i++) printf("%lld ",...
-
[BOJ] 15367 : Spirale
15367 : Spirale 풀이 달.팽.이.조.아.!.! 코드 #include <cstdio> #include <algorithm> const int dx[2][4] = { {0,-1,0,1},{0,-1,0,1} }; const int dy[2][4] = { {-1,0,1,0},{1,0,-1,0} }; int n, m, k; int a[500][500]; int main() { scanf("%d %d %d", &n, &m, &k); while (k--) { int x, y, c, num = 1, cnt = 2, dir = 0; scanf("%d %d %d", &x, &y, &c); x += 249, y += 249; if (!a[x][y]) a[x][y] = 1; while (dir <...
-
[BOJ] 15366 : Olivander
15366 : Olivander 풀이 정.렬.조.아 코드 #include <cstdio> #include <algorithm> using namespace std; int n, a[100], b[100]; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); for (int i = 0; i < n; i++) scanf("%d", &b[i]); sort(a, a + n); sort(b, b + n); while (n--) if (a[n] > b[n]) return !printf("NE"); return !printf("DA"); } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨,...
-
[BOJ] 10547 : STUDENTSKO
COCI 2014/2015 Contest #2 3번 10547 : STUDENTSKO 풀이 한 팀에 들어가야 하는 학생들에게 같은 그룹 넘버를 부여하자 그냥 부여하는 건 아니고 먼저 뽑혀야하는 팀부터 오름차순으로 부여하자 그리고 가장 긴 단조증가하는 수열의 길이를 구하자. 코드 #include <cstdio> #include <algorithm> using namespace std; int n, k, len, a[5005], lis[5005]; pair<int, int> p[5005]; int main() { scanf("%d %d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", &a[i]), p[i].first = a[i]; sort(a, a +...
-
[BOJ] 10546 : 배부른 마라토너
COCI 2014/2015 Contest #2 2번 10546 : 배부른 마라토너 10546 : UTRKA 풀이 map 써도 되고 이렇게 짜도 된다 코드 #include <cstdio> int n, i; char a[22], s[22]; int main() { scanf("%d", &n); n *= 2; for (n--; n--;) { scanf("%s", s); for (i = 0; s[i]; i++) a[i] ^= s[i]; } printf("%s", a); return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조,...
-
[BOJ] 10545 : 뚜기뚜기메뚜기
COCI 2014/2015 Contest #2 1번 10545 : 뚜기뚜기메뚜기 10545 : MOBITEL 풀이 으쌰으쌰 잘 짜보자. 코드 #include <cstdio> int m[11], t[33] = { 2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9 }; char s[111]; int main() { for (int i = 1, a; i <= 9; i++) scanf("%d", &a), m[a] = i; scanf("%s", s + 1); for (int i = 1, now, prv = -1; s[i]; i++) { now = t[s[i] - 'a']; if (prv == now) printf("#"); for (int j =...
-
[BOJ] 11509 : 풍선 맞추기
11509 : 풍선 맞추기 풀이 높이 a의 풍선을 볼 때, a+1 높이에서 날아오는 화살이 있는지 검사해주자! 코드 #include <iostream> using namespace std; int n, a, i, ans, cnt[1000001]; int main() { std::ios_base::sync_with_stdio(false); cin >> n; for (i = 0; i < n; i++) { cin >> a; if (!cnt[a+1]) cnt[a]++, ans++; else cnt[a+1]--, cnt[a]++; } cout << ans; return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge
-
[BOJ] 11508 : 2+1 세일
11508 : 2+1 세일 풀이 ㅎㅎ 코드 #include <stdio.h> #include <algorithm> int main() { int n, i, sum = 0, c[100001]; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &c[i]), sum += c[i]; std::sort(c, c + n); for (i = n - 3; i >= 0; i -= 3) sum -= c[i]; for (i = 0; i < i % 3; i++) sum -= c[i]; printf("%d", sum); return 0; } 아무말 백준,...
-
[BOJ] 11507 : 카드셋트
11507 : 카드셋트 풀이 ㅎㅎ 코드 #include <stdio.h> int a, b, cnt[4]; bool chk[14][4]; int main() { for (char c; ~scanf("%c%1d%1d", &c, &a, &b);) { a = a * 10 + b; switch (c) { case 'P': c = 0; break; case 'K': c = 1; break; case 'H': c = 2; break; case 'T': c = 3; } if (chk[a][c]) { puts("GRESKA"); return 0; } chk[a][c] = 1, cnt[c]++; } for (int i =...