#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6 + 5, mod = 1e9 + 7;
int a[maxn];
string s;
int qpow(int a, int b){
int res = 1;
while(b){
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
void solve(){
int cnt0 = 0, cnt1 = 0;
int n = s.size();
bool bit = 0;
for(int i = 0; s[i]; i++){
// if(s[i] == '?') cnt++;
if(((n - 1) & (i)) == i){
if(s[i] == '?') cnt1++;
else{
bit ^= (s[i] - '0');
}
}
else{
if(s[i] == '?') cnt0++;
}
}
if(bit == 0 && cnt1 == 0){
cout << 0 << '\n';
return;
}
int res = qpow(2, cnt0 + max(0LL, cnt1 - 1));
cout << res << '\n';
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int T = 1;
// cin >> T;
while(cin >> s){
solve();
}
return 0;
}
给定只包含0、1、?(0或1)的串s1,当i >= 2, s[i][j] = abs(s[i - 1][j] - s[i - 1][j + 1]), 有多少个s1,使得s[n] = “1“
最新推荐文章于 2024-08-03 12:30:52 发布