-
[BOJ] 5527 : 전구 장식
5527 : 전구 장식 풀이 다음과 같이 전구가 번갈아 켜진 구간 [x, y]들이 연속되어 있다고 하자. [a, b] [c, d] [e, f] 여기서 (b c), (d e)는 서로 같은 상태(둘 다 켜지거나 꺼지거나)라고 가정하자. 여기서 [c, d] 구간을 flip 해주면 전체 [a, f] 구간이 번갈아 켜지게 된다. 띠용? 코드 #include <cstdio> #include <algorithm> int n, ans, pos = 1, cnt[100001]; int main() { scanf("%d", &n); for (int i = 0, a = -1, b; i...
-
[BOJ] 9489 : 사촌
9489 : 사촌 풀이 부모를 찾으러 산으로 갈까요~ 사촌을 찾으러 강으로 갈까요~ 코드 #include <cstdio> int main() { while (1) { int n, k, a[1111] = { -1 }, p[1111] = { -1 }; scanf("%d %d", &n, &k); if (!n && !k) break; int cnt = -1, idx = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); if (a[i] == k) idx = i; if (a[i] != a[i - 1]...
-
[BOJ] 14815 : Fresh Chocolate (Small)
14815 : Fresh Chocolate (Small) 풀이 룰루랄라 코드 #include <cstdio> #include <algorithm> using namespace std; int main() { int tc, t, n, p, c[5]; scanf("%d", &tc); for (t = 1; t <= tc; t++) { c[0] = c[1] = c[2] = c[3] = 0; scanf("%d %d", &n, &p); for (int i = 0, a; i < n; i++) scanf("%d", &a), c[a % p]++; int r = c[0]; if (p == 2) { r += (c[1]...
-
[BOJ] 14816 : Fresh Chocolate (Large)
14816 : Fresh Chocolate (Large) 풀이 뭔가 제너럴한 규칙을 찾으려고 했는데 잘 모르겠당 p가 2~4밖에 안 되므로 그냥 경우를 나눠서 잘 따져주자. 코드 #include <cstdio> #include <algorithm> using namespace std; int main() { int tc, t, n, p, c[5]; scanf("%d", &tc); for (t = 1; t <= tc; t++) { c[0] = c[1] = c[2] = c[3] = 0; scanf("%d %d", &n, &p); for (int i = 0, a; i < n; i++) scanf("%d", &a),...
-
[BOJ] 12784 : 인하니카 공화국
12784 : 인하니카 공화국 풀이 루트부터 내려가서 자식들을 끊는 게 좋을지 부모를 끊는 게 좋을지 봐보자. 코드 #include <cstdio> #include <vector> using namespace std; struct edg { int idx, dst; }; vector<edg> gph[1001]; int dfs(int prv, int now, int dst) { int ret = 0; for (edg nxt : gph[now]) if (prv != nxt.idx) ret += dfs(now, nxt.idx, nxt.dst); if (!ret) ret = dst; return ret < dst ? ret : dst; } int main()...