#include #include using namespace std; #define EPS (1e-10) #define REP(i,n) for (int i =0; i < (n);i++) typedef long double ld; typedef long long ll; typedef pair ii; typedef pair pdd; typedef vector vi; typedef vector vll; typedef vector vd; typedef vector vb; typedef vector > vvi; typedef vector vii; /* * */ //bool simple_prime_test(int n){ // if (n <= 1) return false; // if (n <= 3) return true; // if (n%2 == 0) return false; // if (n < 9) return false; // if(n%3 == 0) return false; // for(int i = 5; i*i <= n; i += 6){ // if(n%i == 0 || n % (i+2) == 0){ return false; // } //} int main(int argc, char** argv) { ios::sync_with_stdio(false); //karty 0-20 20-40 ... vector card_code; vector cards_scores; vector hand_suits_count(4); string card; int hand_value = 0; for(int i =0;i<5;i++){ cin >>card; int card_value = 0; if(card.length() == 2){ if(card[0] == 'J' || card[0] == 'K' || card[0] == 'Q' || card[0] == 'A'){ if(card[0] == 'J'){ card_value += 11; }else if(card[0] == 'Q'){ card_value += 12; }else if(card[0] == 'K'){ card_value += 13; }else if(card[0] == 'A'){ card_value += 14; } cards_scores.push_back(10); }else{ card_value += card[0]-'0'; cards_scores.push_back(card[0]-'0'); } if(card[1] == 'H'){ card_value +=20; hand_suits_count[1]++; }else if (card[1] == 'C'){ card_value +=40; hand_suits_count[2]++; }else if(card[1] == 'S'){ card_value +=60; hand_suits_count[3]++; }else if(card[1] == 'D'){ hand_suits_count[0]++; } }else{ if(card[2] == 'H'){ card_value +=20; hand_suits_count[1]++; }else if (card[2] == 'C'){ card_value +=40; hand_suits_count[2]++; }else if(card[2] == 'S'){ card_value +=60; hand_suits_count[3]++; }else if(card[2] == 'D'){ hand_suits_count[0]++; } card_value +=10; cards_scores.push_back(10); } card_code.push_back(card_value); hand_value += cards_scores[i]; } int rules_used = 0; int last_val = 0; bool mult_last = false; //1 doresit product hand_value += 1; rules_used++; // cout << hand_value << endl; int j_count = 0; for(int j = 0; j< 5;j++){ if((card_code[j]%20)%11 == 0){ j_count++; } } hand_value += cards_scores[0]*j_count; last_val = 1 + cards_scores[0]*j_count; mult_last = false; // cout << hand_value << endl; // cout << j_count << endl; //2 for(auto v:hand_suits_count){ if(v >=2){ rules_used++; hand_value *= 2; last_val = 2; mult_last = true; break; } } //3 bool one = true; for (auto v : hand_suits_count) { if (v < 1){ one = false; } } if(one){ rules_used++; hand_value*=2; last_val = 2; mult_last = true; } //4 int black = hand_suits_count[2] + hand_suits_count[3]; int red = hand_suits_count[1] + hand_suits_count[0]; int tmpa = abs(black-red); if(tmpa > 0){ rules_used++; last_val = tmpa; mult_last = false; } hand_value += abs(black-red); // cout << hand_value << endl; //5 bool rule5_applied = false; if(hand_value%2 == 0){ rule5_applied = true; rules_used++; for(int l=1;l<=hand_value;l++){ if(hand_value %l == 0){ hand_value += l; } } mult_last = false; hand_value = 0; } // cout << hand_value << endl; // //6 int seven_c = 0; for(auto c:card_code ){ if((c%20)%7 == 0){ seven_c++; } } if(seven_c == 4){ rule5_applied = false; rules_used++; last_val = -121; mult_last = false; hand_value -= 121; } //7 if(hand_value >0){ int min_s = 20; for(auto v: cards_scores){ if(v < min_s){ min_s = v; } } hand_value += min_s; last_val = min_s; mult_last = false; rules_used++; rule5_applied = false; } //8 if(hand_value <0){ hand_value *= -1; last_val = 1; mult_last = true; rules_used++; rule5_applied = false; } //9 bool rule9_used = false; if(hand_suits_count[0] == 3){ rule9_used = true; rules_used++; rule5_applied = false; hand_value += 1; last_val = 1; mult_last = false; for(int k = 0; k <5; k+=20){ if(cards_scores[k] == 2){ cards_scores[k] =5; } if(cards_scores[k] == 5){ cards_scores[k] =2; } if(cards_scores[k] == 6){ cards_scores[k] =9; } if(cards_scores[k] == 9){ cards_scores[k] =6; } } } //10 bool straight = true; int start = cards_scores[0]; sort(cards_scores.begin(),cards_scores.end()); for(int ki = 1; ki < 5; ki++){ if(start+1 == cards_scores[ki]){ start++; }else{ straight = false; break; } } // bool aces_used = false; if(straight){ rule9_used = false; rule5_applied = false; rules_used++; int a_count = 0; for(int ki = 0; ki< 5;ki++){ if((card_code[ki]%20)%14 == 0){ a_count++; } } hand_value += a_count*5; last_val = a_count*5; mult_last = false; } //11 if(rules_used > 8){ int tmp_val = hand_value; int num_ones = 0; while(tmp_val > 0){ num_ones += tmp_val%2; tmp_val/=2; } hand_value += num_ones; last_val = -539; mult_last = true;//TRIK pozor rule9_used = false; rule5_applied = false; } //12 bool two_in_hand = false; for(auto v:cards_scores){ if(v == 2){ two_in_hand = true; break; } } if(two_in_hand){ if(rule5_applied){ //5 if(hand_value%2 == 0){ rule5_applied = true; rules_used++; for(int l=1;l<=hand_value;l++){ if(hand_value %l == 0){ hand_value += l; } } mult_last = false; hand_value = 0; } } else if(rule9_used){ if(hand_suits_count[0] == 3){ rule9_used = true; rules_used++; hand_value += 1; last_val = 1; mult_last = false; for(int k = 0; k <5; k+=20){ if(cards_scores[k] == 2){ cards_scores[k] =5; } if(cards_scores[k] == 5){ cards_scores[k] =2; } if(cards_scores[k] == 6){ cards_scores[k] =9; } if(cards_scores[k] == 9){ cards_scores[k] =6; } } } }else if(mult_last && last_val == -539){ //11 if(rules_used > 8){ int tmp_val = hand_value; int num_ones = 0; while(tmp_val > 0){ num_ones += tmp_val%2; tmp_val/=2; } hand_value += num_ones; last_val = -539; mult_last = true;//TRIK pozor } }else if(mult_last){ hand_value *= last_val; }else{ hand_value += last_val; } } //13 two_in_hand = false; for(auto v:cards_scores){ if(v == 2){ two_in_hand = true; break; } } // cout << hand_value << endl; if(two_in_hand){ hand_value *= 2; } cout << hand_value << endl; return 0; }