题解
标准的递归定义。按照递归定义处理即可。
答案很大,要用int128或者double。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using namespace std;
typedef __int128 ll;
int n;
ll ans = 0;
void init(){
    scanf("%d", &n);
}
void get(ll d){
    int p;
    scanf("%1d", &p);
    if(p == 0) ans += d * d;
    else if(p == 2){
        for(int i = 0; i < 4; ++i) get(d >> 1);
    }
}
void solve(){
    ll a = 1;
    for(int i = 1; i <= n; ++i) a *= 2ll;
    get(a);
    int num[50], len = 0;
    while(ans)
        num[++len] = ans % 10, ans /= 10;
    for(int i = len; i >= 1; --i) printf("%d", num[i]);
}
int main(){
    init();
    solve();
    return 0;
}