juanjo12x

Live_Archive_6624

Oct 3rd, 2014
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <cctype>
  5. #include <cstring>
  6. #include <map>
  7.  
  8. using namespace std;
  9.  
  10. map<char,int> m;
  11. long double DP[1300];
  12. int arr[1300];
  13. int fin;
  14.  
  15. long double recur(int pos){
  16.     if(DP[pos] > -1.0) return DP[pos];
  17.     if(pos > fin){ DP[pos] = 0.0; return 0.0;}
  18.     else if(pos == fin){ DP[pos] = 1.0; return 1.0;}
  19.     else if(arr[pos] != -1){ DP[pos] = 1.0; return 1.0;}
  20.  
  21.     long double prob = 0.0;
  22.      
  23.     for(int i=2;i<=11;i++){
  24.         long double factor = 1.0/13.0;
  25.         if(i==10) factor*=4;
  26.  
  27.         prob += factor*recur(pos+i);
  28.     }
  29.     DP[pos] = prob;
  30.     return prob;
  31. }
  32. int main(){
  33.     char buffer[5];
  34.     int n,m;
  35.     while(cin>>n>>m){
  36.         int pos = m;
  37.         memset(arr,-1 ,sizeof(arr));
  38.         for(int i=0;i<1300;i++) DP[i] = -1.0;
  39.          
  40.         for(int i=0;i<n;i++){
  41.             scanf("%s",buffer);
  42.             int num;
  43.             if(isdigit(buffer[0])) arr[pos] = atoi(buffer);
  44.             else{
  45.                 if(buffer[0] == 'J' || buffer[0] == 'Q' || buffer[0] == 'K') arr[pos] = 10;
  46.                 else arr[pos] = 11;
  47.             }
  48.              
  49.             if(i!=n-1) pos += arr[pos];
  50.         }
  51.         long double rpta=0.0;
  52.         fin = pos;
  53.         for(int i=1;i<=10;i++){
  54.             rpta += recur(i)/10.0;
  55.         }
  56.  
  57.         printf("%.10llf\n",rpta);
  58.     }
  59.  
  60. }
Add Comment
Please, Sign In to add comment