Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <bitset>
- #include <cmath>
- #include <cstdio>
- #include <cstring>
- #include <deque>
- #include <iomanip>
- #include <iostream>
- #include <queue>
- #include <map>
- #include <numeric>
- #include <set>
- #include <sstream>
- #include <stack>
- #include <utility>
- #include <vector>
- #define INF 1000000000
- #define FOR(i, a, b) for(int i=int(a); i<int(b); i++)
- #define FORC(cont, it) for(typeof((cont).begin()) it = (cont).begin(); it != (cont).end(); it++)
- #define pb push_back
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> ii;
- typedef vector<int> vi;
- typedef vector<ii> vii;
- typedef vector<vi> vvi;
- #define difCards 10
- #define cardsNeeded 3
- int alan, dealer[2], sumDealer, cards[difCards], nums[cardsNeeded];
- double fold = -1, split, stay, combs;
- void splits(int n) {
- //When n reaches 3 it stops
- if (n == cardsNeeded) {
- if (alan + nums[0] + 2 > sumDealer&&nums[1] + nums[2] + 4 > sumDealer) { //If alan wins, add 3 chips
- split += 3.0;
- }
- else if (alan + nums[0] + 2 <= sumDealer&&nums[1] + nums[2] + 4 <= sumDealer) { //If alan looses loose 3 chips
- split -= 3.0;
- }
- combs++; //Increase combinations
- return;
- }
- FOR(i, 0, difCards) {
- cards[i]--; //Take 1 card away to avoid repeating it later on.
- nums[n] = i; //Store value of i
- FOR(j,0,cards[i]+1) splits(n + 1); //Grab next card
- cards[i]++; //Put card back on
- }
- }
- int main() {
- //Input, need i say more?
- while (cin >> alan >> dealer[0] >> dealer[1]&&alan) {
- //More input
- FOR(i, 0, difCards) {
- cin >> cards[i];
- }
- sumDealer = dealer[0] + dealer[1];
- //Reset stay y combs
- stay = 0.0;
- combs = 0;
- //Check all possible combinations, get expected value
- FOR(i, 0, difCards) {
- FOR(j, 0, cards[i]) {
- if (alan + i + 2 > sumDealer) { //If alan wins, he gets 2 chips
- stay += 2.0;
- }
- else stay -= 2.0; //If alan looses loose 2 chips
- combs++; //Increase combinations
- }
- }
- stay /= combs; //Expected value
- //Reset for split
- combs = 0.0;
- split = 0.0;
- splits(0);
- split /= combs; //Expected value
- if (fold >= split&&fold >= stay) { //If fold is biggest or same as others, then fold.
- cout << "fold" << endl;
- }
- else if (stay >= split&&stay > fold) { //If stay is biggest or same as split, then stay
- cout << "stay" << endl;
- }
- else { //If split is biggest split
- cout << "split" << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement