萌新0分求助!大佬们帮忙看看吧(悬关一个
查看原帖
萌新0分求助!大佬们帮忙看看吧(悬关一个
998149
zyc111111楼主2023/7/24 15:24
#include<bits/stdc++.h>
using namespace std;

const int MAX_N = 15;
const int MAX_SUM = 30;

char a[MAX_N], b[MAX_N];
int dp[MAX_N][2 * MAX_SUM + 1];

int main() {
    scanf("%s%s", a + 1, b + 1);
    int n = strlen(a + 1);

    int sum = 0;
    for (int i = 1; i <= n; ++i) {
        if (a[i] == '+') sum++;
        else sum--;
    }

    dp[n + 1][sum + MAX_SUM] = 1;

    for (int i = n; i >= 1; --i) {
        for (int x = -MAX_SUM; x <= MAX_SUM; ++x) {
            if (b[i] == '?') {
                dp[i][x + MAX_SUM] = dp[i + 1][x - 1 + MAX_SUM] + dp[i + 1][x + 1 + MAX_SUM];
            } else if (b[i] == '-') {
                dp[i][x + MAX_SUM] = dp[i + 1][x - 1 + MAX_SUM];
            } else {
                dp[i][x + MAX_SUM] = dp[i + 1][x + 1 + MAX_SUM];
            }
        }
    }

    int ans1 = dp[1][sum + MAX_SUM];
    for (int x = -MAX_SUM; x <= MAX_SUM; ++x) {
        ans1 += dp[1][x + MAX_SUM];
    }

    int ans = dp[1][sum + MAX_SUM];

    printf("%.12lf", ans / (ans1 * 1.0));
    return 0;
}

2023/7/24 15:24
加载中...