fork download
#include <cstdio>
#include <cstring>
#include <utility>
#include <algorithm>
#pragma GCC diagnostic ignored "-Wlong-long"
using namespace std;
int n;
char s[500001];
int lval[500000];
int rval[500000];

long long dp[2][500001];

const long long impossible = 500000LL * 2147483647LL + 1;

long long solve() {
    dp[1][0] = 0;
    fill_n(dp[1] + 1, n, impossible * 2);
    for(int i = 0; i < n; i++) {
        int t = i % 2, f = 1 - t;
        switch(s[i]) {
        case '(':
            dp[t][0] = impossible * 2;
            copy(dp[f], dp[f] + n, dp[t] + 1);
            break;
        case ')':
            copy(dp[f] + 1, dp[f] + n + 1, dp[t]);
            dp[t][n] = impossible * 2;
            break;
        case '?':
            dp[t][0] = dp[f][1] + rval[i];
            for(int j = 1; j < n; j++)
                dp[t][j] = min(dp[f][j - 1] + lval[i], dp[f][j + 1] + rval[i]);
            dp[t][n] = dp[f][n - 1] + lval[i];
            break;
        }
    }
    return dp[(n - 1) % 2][0];
}


int main(){
    int t;
    scanf("%d", &t);
    while(t--) {
        scanf("%s", s);
        n = strlen(s);
        for(int i = 0; i < n; i++)
            if(s[i] == '?')
                scanf("%d %d", lval + i, rval + i);
        long long x = solve();
        if(x >= impossible) {
            puts("IMBA");
        } else {
            #pragma GCC diagnostic push
            #pragma GCC diagnostic ignored "-Wformat"
            printf("%lld\n", x);
            #pragma GCC diagnostic pop
        }
    }
}
Success #stdin #stdout 0s 15504KB
stdin
4
(())
(??)
1 10
10 100
?????)))))
2 1
2 1
2 1
2 1
2 1
(((((?
2147483647 -2147483648
stdout
0
20
10
IMBA