Submission #911591

#TimeUsernameProblemLanguageResultExecution timeMemory
911591The_SamuraiLamps (JOI19_lamps)C++17
4 / 100
373 ms12500 KiB
// I stand with PALESTINE //#pragma GCC optimize("Ofast,O3") //#pragma GCC target("avx,avx2") #include "bits/stdc++.h" using namespace std; using ll = long long; template<typename T> struct SegTree { vector<T> tree; int size; T neutral_element = 1e9; // sum - 0, mx - (-INF), mn - INF inline T merge(T a, T b) { return min(a, b); } void init(int n) { size = 1; while (size <= n) size *= 2; tree.assign(2 * size, neutral_element); } void build(vector<T> &a) { size = 1; while (size < a.size()) size *= 2; tree.assign(2 * size, neutral_element); for (int i = size; i < size + a.size(); i++) tree[i] = a[i - size]; for (int i = size - 1; i > 0; i--) tree[i] = merge(tree[i << 1], tree[i << 1 | 1]); } void set(int p, T value) { // set value at position p p += size; tree[p] = merge(value, tree[p]); for (; p > 1; p >>= 1) tree[p >> 1] = merge(tree[p], tree[p ^ 1]); } T get(int l, int r) { // sum on interval [l, r] if (l > r) return neutral_element; T res = neutral_element; for (l += size, r += size + 1; l < r; l >>= 1, r >>= 1) { if (l & 1) res = merge(res, tree[l++]); if (r & 1) res = merge(res, tree[--r]); } return res; } }; void solve() { int n; string s, t; cin >> n >> s >> t; s = "&" + s; t = "&" + t; auto find_ans = [&]() -> int { SegTree<int> sg; sg.init(n + 1); sg.set(0, 0); int l1 = 0, l2 = 0, eq = 0; for (int i = 1; i <= n; i++) { // teng emas if (s[i] != t[i]) l1++; else l1 = 0; if (l1) sg.set(i, sg.get(i - l1, i - 1) + 1); // hammasi teng if (s[i] == t[i]) eq++; else eq = 0; if (eq) sg.set(i, sg.get(i - eq, i - 1)); // bir hil qib qo'yish if (t[i] == t[i - 1]) l2++; else l2 = 1; sg.set(i, sg.get(i - l2, i - 1) + 1); // cout << i << ' ' << sg.get(i, i) << endl; } return sg.get(n, n); }; int ans = find_ans(); for (int i = 1; i <= n; i++) s[i] ^= 1; cout << min(ans, find_ans() + 1); } int main() { cin.tie(0)->sync_with_stdio(false); #ifdef sunnatov freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int q = 1; // cin >> q; while (q--) { solve(); cout << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...