| 比赛 |
期末考试0 |
评测结果 |
WAAAAWWEEE |
| 题目名称 |
Sayaku,移动 |
最终得分 |
40 |
| 用户昵称 |
赵飞羽 |
运行时间 |
0.476 s |
| 代码语言 |
C++ |
内存使用 |
3.66 MiB |
| 提交时间 |
2026-02-07 11:21:13 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
int n, t[N*N], len, ans, tot, siz;
string s;
void dfs(int pos) {
if (len >= n) return;
int x = s[len] - '0';
t[pos] = x + 1;
if (x == 0) return;
else if (x == 1) {
len++;
dfs(pos*2);
} else if (x == 2) {
len++;
dfs(pos*2+1);
} else {
len++;
dfs(pos*2);
len++;
dfs(pos*2+1);
}
}
void _find(int pos) {
if (!t[pos]) {
siz--;
return;
} else if (!t[pos*2] && !t[pos*2+1]) {
return;
} else {
siz++;
_find(pos*2);
siz++;
_find(pos*2+1);
}
}
int main() {
freopen("movement.in", "r", stdin);
freopen("movement.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> s;
n = s.size();
if (s[n-1] == '0') {
for (int i = 0; i < n; i++) {
if (i == n - 1) {
cout << 1;
return 0;
}
if (s[i] != '1') {
break;
}
}
}
dfs(1);
for (int i = 1; t[i]; i *= 2) {
siz = 1;
_find(i*2+1);
ans = max(siz*2+1, ans);
}
for (int i = 1; t[i]; i = i * 2 + 1) {
siz = 1;
_find(i*2);
tot = max(siz*2+1, tot);
}
cout << min(ans, tot);
return 0;
}