-
[BOJ] 1605 : 반복 부분문자열
1605 : 반복 부분문자열 풀이 suffix array practice 코드 #include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 10; int n, ans; int suf[MAXN], rev[MAXN]; char str[MAXN]; void cntsort(vector<int>& ord, int m) { int i; vector<int> cnt(m + 1, 0), tmp(n + 1); for (i = 0; i < n; i++) cnt[ord[i]]++; for (i = 1; i <= m; i++) cnt[i] += cnt[i - 1]; for (i = n; i--;) tmp[--cnt[ord[suf[i]]]] = suf[i];...
-
[BOJ] 12904 : A와 B
12904번: A와 B 풀이 직접 시뮬레이션 해보면 된다! 코드 #include <bits/stdc++.h> using namespace std; string S, T; void reverse(string K) { for (int i = 0; i < K.length(); ++i) T[K.length() - i - 1] = K[i]; } int main() { cin >> S >> T; int flag = 0; while (true) { if (S.length() == T.length()) { if (!S.compare(T)) flag = 1; break; } int len = T.length() - 1; char now = T[len];...
-
[BOJ] 12946 : 육각 보드
12946 : 육각보드 풀이 잘 생각해보면 보드는 최대 3개의 색으로 칠할 수 있다. 여기를 참고. 0과 1인 경우는 따로 처리해주고 DFS로 돌면서 이분그래프이면 답은 2, 아니면 3이다. 코드 #include <bits/stdc++.h> using namespace std; const int dx[6] = { -1,-1,0,0,1,1 }; const int dy[6] = { 0,1,-1,1,-1,0 }; int n, ans, col[51][51]; char e[51][51]; void dfs(int x, int y, int c) { col[x][y] = c; ans = max(ans, 1); for (int i = 0; i <...
-
[BOJ] 13305 : 주유소
13305 : 주유소 풀이 지금 주유소보다 더 작은 주유소가 나올 때 까지 누적하며 풀면 된다. 그리디! 코드 #include <bits/stdc++.h> using namespace std; const int n_ = 1e5 + 10; int n, i, val, dst[n_], prv = 1e9 + 10; long long ans; int main() { scanf("%d", &n); for (i = 0; i < n - 1; i++) scanf("%d", &dst[i]); for (i = 0; i < n - 1; i++) { scanf("%d", &val); prv = min(prv,...
-
[BOJ] 2531 : 회전 초밥
2531 : 회전 초밥 풀이 범위를 나타내는 left와 right를 두고 inch worm으로 계산해나가면 된다. 근데 그냥 반복문으로도 풀 수 있다. 코드 #include <stdio.h> #include <algorithm> using namespace std; int N, D, K, C; int sushi[30000 + 3000 + 3]; int cur_cnt[3000 + 3], cur_ans; void push(int sushi_num) { if (!cur_cnt[sushi_num]) ++cur_ans; ++cur_cnt[sushi_num]; } void pop(int sushi_num) { --cur_cnt[sushi_num]; if (!cur_cnt[sushi_num]) --cur_ans; } int main() { scanf("%d %d %d %d", &N, &D, &K, &C); for (int...