fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <map>
  5. #include <cstring>
  6. #include <cstdio>
  7. #include <algorithm>
  8. #include <set>
  9. #include <queue>
  10. #include <stack>
  11. #include <cstdlib>
  12. #include <string>
  13. #include <list>
  14. #include <bitset>
  15. #include <iomanip>
  16. #include <cmath>
  17. #include <sstream>
  18. #include <deque>
  19. #include <climits>
  20. #include <cassert>
  21.  
  22. using namespace std;
  23.  
  24. #define ull unsigned long long
  25. #define ll long long
  26. #define Max(x,y) ((x)>(y)?(x):(y))
  27. #define Min(x,y) ((x)<(y)?(x):(y))
  28. #define Sl(x) scanf("%lld",&x)
  29. #define Su(x) scanf("%llu",&x)
  30. #define S(x) scanf("%d",&x)
  31. #define IS(x) cin>>x
  32. #define ISF(x) getline(cin,x)
  33. #define pii pair<int,int>
  34. #define pll pair<ll,ll>
  35. #define pps pair<ll,pll>
  36. #define ppf pair<pll,ll>
  37. #define psi pair<string,int>
  38. #define pis pair<int,string>
  39. #define fr first
  40. #define se second
  41. #define MOD 1000000007
  42. #define MP(x,y) make_pair(x,y)
  43. #define eps 1e-7
  44. #define V(x) vector<x>
  45. #define pb(x) push_back(x)
  46. #define mem(x,i) memset(x,i,sizeof(x))
  47. #define fori(i,s,n) for(i=(s);i<(n);i++)
  48. #define ford(i,s,n) for(i=(n);i>=(s);--i)
  49. #define INF 8944674407370955161LL
  50. #define debug(i,st,arr) fori(i,0,st){cout<<arr[i]<<" ";}cout<<endl;
  51. #define forci(i,sw) for((i)=(sw).begin();(i)!=(sw).end();(i)++)
  52. #define forcd(i,sw) for((i)=(sw).rbegin();(i)!=(sw).rend();(i)++)
  53.  
  54. int abs(int x) {if(x < 0) return -x; return x;}
  55.  
  56. double a[10][120][301];
  57.  
  58. double dp(int w, int b, int r) {
  59.  
  60. if (r <= 0) return 1.0;
  61. if (w == 10 || b == 120) return 0.0;
  62.  
  63. if (a[w][b][r] != -1.0) return a[w][b][r];
  64.  
  65. a[w][b][r] = (dp(w, b+1, r) + dp(w, b+1, r-1) + dp(w, b+1, r-2) + dp(w, b+1, r-3) + dp(w, b+1, r-4) + dp(w, b+1, r-5) + dp(w, b+1, r-6) + 2 * dp(w, b, r-1) + dp(w+1, b+1, r)) / 10.0;
  66.  
  67. return a[w][b][r];
  68. }
  69.  
  70. int main()
  71. {
  72. int t, ball, run, target, w;
  73. double ov, ans;
  74. char s[20];
  75. cin >> t;
  76. while (t--) {
  77. run = w = ball = 0;
  78. scanf("%lf%s%d", &ov, s, &target);
  79. ball = ((int)ov) * 6;
  80. ball += (ov * 10.0) - ((int)ov * 10);
  81. int i = 0;
  82. while (s[i] != '/') {
  83. run = run * 10 + (s[i++] - '0');
  84. }
  85. i++;
  86. while (s[i] != '\0') {
  87. w = w * 10 + (s[i++] - '0');
  88. }
  89. //cout << ball << " " << run << " " << w << " " << target << endl;
  90.  
  91. if (target - run <= 0 || target == 0) {
  92. cout << "100.00\n";
  93. continue;
  94. }
  95. if (((w == 10 || ball == 120) && target - run > 0)) {
  96. cout << "0.0\n";
  97. continue;
  98. }
  99. for (int i = 0; i < 10; i++) {
  100. for (int j = 0; j < 120; j++) {
  101. for (int k = 0; k < 301; k++) {
  102. a[i][j][k] = -1.0;
  103. }
  104. }
  105. }
  106.  
  107. ans = dp(w, ball, target-run);
  108. //cout << ans << endl;
  109. int p = (double)(ans *10000.0);
  110. int q = p % 100;
  111. p /= 100;
  112. if (p) {
  113. printf("%d.", p);
  114. } else {
  115. printf("0.");
  116. }
  117. if (q < 10 && q != 0) {
  118. printf("0%d\n", q);
  119. } else if (q) {
  120. printf("%d\n", q);
  121. } else {
  122. printf("00\n");
  123. }
  124. }
  125. return 0;
  126. }
  127.  
Success #stdin #stdout 0.11s 6120KB
stdin
10

19.4 129/9 129

20.0 100/10 100

19.5 0/9 100

19.5 0/0 1

0.0 0/0 300

0.0 0/0 200

0.0 0/0 100

10.0 0/0 100

10.0 0/5 100

13.5 112/4 222
stdout
100.00
100.00
0.00
80.00
18.02
61.65
97.60
97.60
55.49
35.84