답안 #793640

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
793640 2023-07-26T04:59:37 Z 반딧불(#10057) Flip it and Stick it (CCO23_day2problem1) C++17
13 / 25
6 ms 2356 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int INF = 1e9;

struct minSegTree{
    int tree[800002];

    void init(int i, int l, int r){
        tree[i] = INF;
        if(l==r) return;
        int m = (l+r)>>1;
        init(i*2, l, m);
        init(i*2+1, m+1, r);
    }

    void update(int i, int l, int r, int x, int y){
        if(l==r){
            tree[i] = min(tree[i], y);
            return;
        }
        int m = (l+r)>>1;
        if(x<=m) update(i*2, l, m, x, y);
        else update(i*2+1, m+1, r, x, y);
        tree[i] = min(tree[i*2], tree[i*2+1]);
    }

    int query(int i, int l, int r, int s, int e){
        if(r<s || e<l) return INF;
        if(s<=l && r<=e) return tree[i];
        int m = (l+r)>>1;
        return min(query(i*2, l, m, s, e), query(i*2+1, m+1, r, s, e));
    }
} minTree;

int n;
int arr[200002];
int k;
int b[4];

void input();
void solvek1();
void solvek2();
void solvek3();

int main(){
    input();
    if(k==1) solvek1();
    if(k==2) solvek2();
    if(k==3) solvek3();
}

void input(){
    string str;
    cin >> str;
    n = (int)str.size();
    for(int i=1; i<=n; i++) arr[i] = (str[i-1] - '0');

    cin >> str;
    k = (int)str.size();
    for(int i=1; i<=k; i++) b[i] = (str[i-1] - '0');
}

void solvek1(){
    if(count(arr+1, arr+n+1, b[1])) printf("-1");
    else printf("0");
    exit(0);
}

void solvek2(){
    int ans = 0;
    if(b[1] != b[2]){
        int l = b[2], r = b[1];
        vector<int> v;
        for(int i=1; i<=n; i++){
            if(v.empty() || v.back() != arr[i]) v.push_back(arr[i]);
        }
        if(!v.empty() && v.back() == r) v.pop_back();
        if(!v.empty() && v[0] == l) v.erase(v.begin());
        ans = (int)v.size()/2;
    }
    else{
        int x = b[1];
        if(count(arr+1, arr+n+1, x) > (n+1)/2) ans = -1;
        else{
            for(int i=1; i<n; i++) if(arr[i] == x && arr[i+1] == x) ans++;
        }
    }
    printf("%d", ans >= n*2 ? -1 : ans);
}

void solve001(){
    int zeroCnt = 0, ans = 0;
    for(int i=1; i<=n; i++){
        if(arr[i] == 0){
            zeroCnt++;
            continue;
        }
        if(zeroCnt <= 1){
            zeroCnt = max(zeroCnt-1, 0);
            continue;
        }
        int j = i;
        while(j<n){
            if(arr[j+1] == 1 || j+1==n) j++;
            else if(arr[j+2] == 1) j+=2;
            else break;
        }
        ans++;
        zeroCnt = max(zeroCnt-1, 0);
        i=j;
    }
    printf("%d", ans);
}

void solvek3(){
    if(b[1] != b[3]){ /// 001 ����
        if(b[1] != b[2]) reverse(arr+1, arr+n+1), reverse(b+1, b+k+1);
        if(b[1] != 0){
            for(int i=1; i<=n; i++) arr[i] = !arr[i];
            for(int i=1; i<=k; i++) b[i] = !b[i];
        }
        solve001();
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 4 ms 1380 KB Output is correct
4 Correct 4 ms 1380 KB Output is correct
5 Correct 3 ms 1380 KB Output is correct
6 Correct 4 ms 1392 KB Output is correct
7 Correct 3 ms 1380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 4 ms 1380 KB Output is correct
7 Correct 3 ms 1380 KB Output is correct
8 Correct 4 ms 2356 KB Output is correct
9 Correct 4 ms 1832 KB Output is correct
10 Correct 5 ms 1832 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 4 ms 1380 KB Output is correct
7 Correct 3 ms 1380 KB Output is correct
8 Correct 4 ms 2356 KB Output is correct
9 Correct 4 ms 1832 KB Output is correct
10 Correct 5 ms 1832 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 224 KB Output is correct
20 Correct 4 ms 1456 KB Output is correct
21 Correct 3 ms 1380 KB Output is correct
22 Correct 4 ms 2332 KB Output is correct
23 Correct 4 ms 1832 KB Output is correct
24 Correct 4 ms 1832 KB Output is correct
25 Correct 0 ms 212 KB Output is correct
26 Correct 4 ms 1380 KB Output is correct
27 Correct 6 ms 1380 KB Output is correct
28 Correct 3 ms 1380 KB Output is correct
29 Correct 4 ms 1380 KB Output is correct
30 Correct 4 ms 1380 KB Output is correct
31 Correct 4 ms 1380 KB Output is correct
32 Correct 4 ms 1380 KB Output is correct
33 Correct 0 ms 212 KB Output is correct
34 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 4 ms 1328 KB Output is correct
8 Correct 4 ms 1380 KB Output is correct
9 Correct 4 ms 1380 KB Output is correct
10 Correct 4 ms 1380 KB Output is correct
11 Correct 4 ms 1380 KB Output is correct
12 Correct 4 ms 1380 KB Output is correct
13 Correct 4 ms 1380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 336 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Incorrect 0 ms 212 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 4 ms 1328 KB Output is correct
8 Correct 4 ms 1380 KB Output is correct
9 Correct 4 ms 1380 KB Output is correct
10 Correct 4 ms 1380 KB Output is correct
11 Correct 4 ms 1380 KB Output is correct
12 Correct 4 ms 1380 KB Output is correct
13 Correct 4 ms 1380 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 336 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Incorrect 0 ms 212 KB Output isn't correct
19 Halted 0 ms 0 KB -