답안 #793629

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
793629 2023-07-26T04:52:40 Z 박영우(#10061) Flip it and Stick it (CCO23_day2problem1) C++17
18 / 25
4 ms 604 KB
#include <bits/stdc++.h>
#include <cassert>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2,fma")
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
#define MAX 2023
#define MAXS 500
#define INF 1000000000000000001
#define bb ' '
#define ln '\n'
#define Ln '\n'
signed main() {
	ios::sync_with_stdio(false), cin.tie(0);
	string s, t;
	cin >> s >> t;
	if (s.size() < t.size()) {
		cout << 0 << ln;
		return 0;
	}
	if (t[0] == '1') {
		for (auto& c : s) c ^= 1;
		for (auto& c : t) c ^= 1;
	}
	if (t == "001") {
		for (auto& c : s) c ^= 1;
		for (auto& c : t) c ^= 1;
		reverse(s.begin(), s.end());
		reverse(t.begin(), t.end());
	}
	if (t.size() == 1) {
		for (auto c : s) {
			if (c == t[0]) {
				cout << -1 << ln;
				return 0;
			}
		}
		cout << 0 << ln;
		return 0;
	}
	if (t.size() == 2) {
		if (t[0] == t[1]) {
			int N = s.size();
			int i;
			int cnt = 0;
			for (i = 0; i < N; i++) if (s[i] == '1') cnt++;
			if (cnt < N / 2) {
				cout << -1 << ln;
				return 0;
			}
			int ans = 0;
			for (i = 0; i + 1 < N; i++) if (s[i] == s[i + 1] && s[i] == '0') ans++;
			cout << ans << ln;
			return 0;
		}
		int N, i;
		N = s.size();
		int pv = 1;
		int ans = 0;
		for (i = 0; i < N; i++) {
			if (s[i] == '1') {
				if (!pv) {
					pv = 1;
					ans++;
				}
			}
			else pv = 0;
		}
		cout << ans << ln;
		return 0;
	}
	if (t == "011") {
		reverse(s.begin(), s.end());
		while (s.size() && s.back() == '1') s.pop_back();
		if (s.empty()) {
			cout << 0 << Ln;
			return 0;
		}
		reverse(s.begin(), s.end());
		int N;
		int str = 0;
		int ans = 0;
		for (auto c : s) {
			if (c == '0') {
				if (str > 1) ans++;
				str = 0;
			}
			else str++;
		}
		if (str > 1) ans++;
		cout << ans << ln;
		return 0;
	}
	if (t == "010") {
		while (s.size() && s.back() == '1') s.pop_back();
		if (s.empty()) {
			cout << 0 << Ln;
			return 0;
		}
		reverse(s.begin(), s.end());
		while (s.size() && s.back() == '1') s.pop_back();
		if (s.empty()) {
			cout << 0 << Ln;
			return 0;
		}
		int N = s.size(), i;
		int cnt = 0;
		for (i = 1; i + 1 < N; i++) if (s[i - 1] == '0' && s[i + 1] == '0' && s[i] == '1') cnt++;
		cout << ++cnt / 2 << Ln;
		return 0;
	}
	int N, M;
	N = s.size();
	vector<int> v;
	int cnt = 0;
	int i;
	for (i = 0; i < N; i++) {
		if (s[i] == '1') {
			v.push_back(cnt);
			cnt = 0;
		}
		else cnt++;
	}
	M = v.size();
	int z, o;
	z = o = 0;
	int ans = 0;
	for (auto x : v) {
		if (!x) z++;
		if (x == 1) o++;
	}
	for (auto& x : v) {
		if (x > 2) {
			int k = x - 1;
			k >>= 1;
			k = min(z, k);
			x -= k * 2;
			ans += k;
			if (x == 1) o++;
			if (k) z--;
		}
	}
	for (auto& x : v) {
		if (x > 2) {
			int k = x - 2;
			ans += k;
			o -= k;
			if (o < 0) {
				cout << -1 << ln;
				return 0;
			}
		}
	}
	cout << ans << ln;
}

Compilation message

Main.cpp: In function 'int main()':
Main.cpp:84:7: warning: unused variable 'N' [-Wunused-variable]
   84 |   int N;
      |       ^
Main.cpp:116:9: warning: variable 'M' set but not used [-Wunused-but-set-variable]
  116 |  int N, M;
      |         ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 604 KB Output is correct
4 Correct 2 ms 604 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 2 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 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 1 ms 604 KB Output is correct
7 Correct 1 ms 604 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 2 ms 604 KB Output is correct
10 Correct 3 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 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 1 ms 604 KB Output is correct
7 Correct 1 ms 604 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 2 ms 604 KB Output is correct
10 Correct 3 ms 604 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 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 0 ms 212 KB Output is correct
20 Correct 1 ms 604 KB Output is correct
21 Correct 1 ms 604 KB Output is correct
22 Correct 1 ms 604 KB Output is correct
23 Correct 2 ms 604 KB Output is correct
24 Correct 2 ms 604 KB Output is correct
25 Correct 0 ms 212 KB Output is correct
26 Correct 3 ms 604 KB Output is correct
27 Correct 2 ms 604 KB Output is correct
28 Correct 1 ms 604 KB Output is correct
29 Correct 2 ms 604 KB Output is correct
30 Correct 3 ms 604 KB Output is correct
31 Correct 3 ms 604 KB Output is correct
32 Correct 2 ms 604 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 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 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 4 ms 604 KB Output is correct
8 Correct 4 ms 604 KB Output is correct
9 Correct 3 ms 604 KB Output is correct
10 Correct 3 ms 604 KB Output is correct
11 Correct 3 ms 604 KB Output is correct
12 Correct 2 ms 604 KB Output is correct
13 Correct 2 ms 604 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 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 2 ms 604 KB Output is correct
11 Correct 2 ms 604 KB Output is correct
12 Correct 3 ms 604 KB Output is correct
13 Correct 3 ms 604 KB Output is correct
14 Correct 3 ms 604 KB Output is correct
15 Correct 2 ms 604 KB Output is correct
16 Correct 2 ms 604 KB Output is correct
17 Correct 2 ms 604 KB Output is correct
18 Correct 2 ms 604 KB Output is correct
19 Correct 3 ms 604 KB Output is correct
20 Correct 2 ms 604 KB Output is correct
21 Correct 2 ms 604 KB Output is correct
22 Correct 2 ms 604 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 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 4 ms 604 KB Output is correct
8 Correct 4 ms 604 KB Output is correct
9 Correct 3 ms 604 KB Output is correct
10 Correct 3 ms 604 KB Output is correct
11 Correct 3 ms 604 KB Output is correct
12 Correct 2 ms 604 KB Output is correct
13 Correct 2 ms 604 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 2 ms 604 KB Output is correct
24 Correct 2 ms 604 KB Output is correct
25 Correct 3 ms 604 KB Output is correct
26 Correct 3 ms 604 KB Output is correct
27 Correct 3 ms 604 KB Output is correct
28 Correct 2 ms 604 KB Output is correct
29 Correct 2 ms 604 KB Output is correct
30 Correct 2 ms 604 KB Output is correct
31 Correct 2 ms 604 KB Output is correct
32 Correct 3 ms 604 KB Output is correct
33 Correct 2 ms 604 KB Output is correct
34 Correct 2 ms 604 KB Output is correct
35 Correct 2 ms 604 KB Output is correct
36 Incorrect 0 ms 212 KB Output isn't correct
37 Halted 0 ms 0 KB -