PGSStas

2019.03.19_C

Mar 19th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define F first
  4. #define S second
  5. #define ll long long
  6. #define ull unsigned long long
  7. #define ld long double
  8. #define SELO ""
  9. #define openfiles ifstream cin("input"  SELO  ".txt"); ofstream cout("output"  SELO  ".txt");
  10. #define faster ios_base::sync_with_stdio(NULL); cin.tie(0); cout.tie(0);
  11. #define all(x) x.begin(), x.end()
  12.  
  13. using namespace std;
  14.  
  15. int main()
  16. {
  17.     openfiles
  18.     string a;
  19.     ll n;
  20.     cin >> a >> n;
  21.     vector <ld> dp2(n + 1), dp5(n + 1);
  22.     ll sum = 0;
  23.     ld cnt5 = 0, cnt2 = 0;
  24.     for(int i = 0; i < a.size(); i++)
  25.     {
  26.         sum = (a[i] - '0' + sum) % 3;
  27.         if((a[i] - '0') % 2 == 0)
  28.             cnt2++;
  29.         if(a[i] == '5')
  30.             cnt5++;
  31.     }
  32.     if(a.back() == '5')
  33.         dp5[0] = 1;
  34.     if((a.back() - '0') % 2 == 0 && sum == 0)
  35.         dp2[0] = 1;
  36.     ld n1 = a.size();
  37.     for(int i = 1; i <= n; i++)
  38.     {
  39.         dp5[i] = max(dp5[i - 1] * ((n1 - 2) / n1 + 2 / n1 * (cnt5 - 1) / (n1 - 1)) + (1 - dp5[i - 1]) * (2.0 / n1 * (cnt5) / (n1 - 1)), dp5[i]);
  40.     }
  41.     if(sum == 0)
  42.         for(int i = 1; i <= n; i++)
  43.         {
  44.             dp2[i] = max(dp2[i - 1] * ((n1 - 2) / n1 + 2 / n1 * (cnt2 - 1) / (n1 - 1)) + (1 - dp2[i - 1]) * (2.0 / n1 * (cnt2) / (n1 - 1)), dp2[i]);
  45.         }
  46.     cout << fixed << setprecision(20) << dp2[n] + dp5[n];
  47. }
Advertisement
Add Comment
Please, Sign In to add comment