Advertisement
Guest User

Split Decision

a guest
Oct 1st, 2014
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cmath>
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <deque>
  7. #include <iomanip>
  8. #include <iostream>
  9. #include <queue>
  10. #include <map>
  11. #include <numeric>
  12. #include <set>
  13. #include <sstream>
  14. #include <stack>
  15. #include <utility>
  16. #include <vector>
  17.  
  18. #define INF 1000000000
  19. #define FOR(i, a, b) for(int i=int(a); i<int(b); i++)
  20. #define FORC(cont, it) for(typeof((cont).begin()) it = (cont).begin(); it != (cont).end(); it++)
  21. #define pb push_back
  22.  
  23. using namespace std;
  24.  
  25. typedef long long ll;
  26. typedef pair<int, int> ii;
  27. typedef vector<int> vi;
  28. typedef vector<ii> vii;
  29. typedef vector<vi> vvi;
  30.  
  31. #define difCards 10
  32. #define cardsNeeded 3
  33.  
  34. int alan, dealer[2], sumDealer, cards[difCards], nums[cardsNeeded];
  35. double fold = -1, split, stay, combs;
  36.  
  37. void splits(int n) {
  38.     //When n reaches 3 it stops
  39.     if (n == cardsNeeded) {
  40.         if (alan + nums[0] + 2 > sumDealer&&nums[1] + nums[2] + 4 > sumDealer) { //If alan wins, add 3 chips
  41.             split += 3.0;
  42.         }
  43.         else if (alan + nums[0] + 2 <= sumDealer&&nums[1] + nums[2] + 4 <= sumDealer) { //If alan looses loose 3 chips
  44.             split -= 3.0;
  45.         }
  46.         combs++; //Increase combinations
  47.         return;
  48.     }
  49.     FOR(i, 0, difCards) {
  50.         cards[i]--; //Take 1 card away to avoid repeating it later on.
  51.         nums[n] = i; //Store value of i
  52.         FOR(j,0,cards[i]+1) splits(n + 1); //Grab next card
  53.         cards[i]++; //Put card back on
  54.     }
  55. }
  56.  
  57. int main() {
  58.     //Input, need i say more?
  59.     while (cin >> alan >> dealer[0] >> dealer[1]&&alan) {
  60.         //More input
  61.         FOR(i, 0, difCards) {
  62.             cin >> cards[i];
  63.         }
  64.         sumDealer = dealer[0] + dealer[1];
  65.         //Reset stay y combs
  66.         stay = 0.0;
  67.         combs = 0;
  68.         //Check all possible combinations, get expected value
  69.         FOR(i, 0, difCards) {
  70.             FOR(j, 0, cards[i]) {
  71.                 if (alan + i + 2 > sumDealer) { //If alan wins, he gets 2 chips
  72.                     stay += 2.0;
  73.                 }
  74.                 else stay -= 2.0; //If alan looses loose 2 chips
  75.                 combs++; //Increase combinations
  76.             }
  77.         }
  78.         stay /= combs; //Expected value
  79.        
  80.         //Reset for split
  81.         combs = 0.0;
  82.         split = 0.0;
  83.         splits(0);
  84.         split /= combs; //Expected value
  85.         if (fold >= split&&fold >= stay) { //If fold is biggest or same as others, then fold.
  86.             cout << "fold" << endl;
  87.         }
  88.         else if (stay >= split&&stay > fold) { //If stay is biggest or same as split, then stay
  89.             cout << "stay" << endl;
  90.         }
  91.         else { //If split is biggest split
  92.             cout << "split" << endl;
  93.         }
  94.     }
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement