fork download
  1.  
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define ll long long
  5. #define endl '\n'
  6. ll N = 1e9+7;
  7. ll oo =1e13;
  8. const ll maxx = 1000000 + 3;
  9. ll n,k=0,q,x,y,z,l,r,mid,ans;
  10. string s1,s2;
  11. ll go(ll ind,ll c) {
  12. if (ind== s2.size()) {
  13. if (c==ans)return 1;
  14. return 0;
  15. }
  16. ll res=0;
  17. if (s2[ind]=='+')res += go(ind+1,c+1);
  18. else if (s2[ind]=='-')res += go(ind+1,c-1);
  19. else if (s2[ind]=='?') {
  20. res += go(ind+1,c-1)+go(ind+1,c+1);
  21. }
  22. return res;
  23. }
  24. void solve() {
  25. ll qcnt=0;
  26. cin>>s1>>s2;
  27. for (char s :s1) {
  28. if (s=='+')ans++;
  29. else ans--;
  30. }
  31.  
  32. for (char s :s2) {
  33. if (s=='?') qcnt++;
  34. else if (s=='+')k++;
  35. else k--;
  36. }
  37. if (qcnt==0) {
  38. if (ans==k) cout << 1;
  39. else cout << 0;
  40. }else {
  41. double prob = go(0,0) / pow(2.0, qcnt);
  42. cout << fixed << setprecision(12) << prob << endl;
  43. }
  44. }
  45. int main() {
  46. ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  47. ll t=1 ;
  48. // cin >>t;
  49. while (t--) {
  50. ans=0;
  51. solve();
  52. }
  53. }
Success #stdin #stdout 0.01s 5292KB
stdin
+-+-
+-??
stdout
0.500000000000