#include #include #include #include #include #define rep(i, j) for(int i = 0; i < int(j); ++i) #define fi first #define se second //typedef long long ll using namespace std; vector > k; vector > body = { {"2", 2}, {"3", 3}, {"4", 4}, {"5", 5}, {"6", 6}, {"7", 7}, {"8", 8}, {"9", 9}, {"10", 10}, {"J", 10}, {"Q", 10}, {"K", 10}, {"A", 10}}; vector > ord = { {"2", 2}, {"3", 3}, {"4", 4}, {"5", 5}, {"6", 6}, {"7", 7}, {"8", 8}, {"9", 9}, {"10", 10}, {"J", 11}, {"Q", 12}, {"K", 13}, {"A", 14}}; int lastrule = -1; int value = 0; int modified = 0; int score(string card){ rep(i, body.size()){ if(body[i].fi == card) return body[i].se; } } int rule(int i){ int ds = 0; int hs = 0; int cs = 0; int ss = 0; rep(i, k.size()){ if(k[i].se == "D") ds++; else if(k[i].se == "H") hs++; else if(k[i].se == "C") cs++; else if(k[i].se == "S") ss++; } if(i == 1){ //MODIFIED? modified += 1; lastrule = 1; if(k.size() >= 4){ value += 1; } int js = 0; rep(i, k.size()) if(k[i].fi == "J") js++; value += js*score(k[0].fi); } else if(i == 2){ if(ds > 1 || hs > 1 || cs > 1 || ss > 1){ value = value * 2; lastrule = 2; modified += 1; } } else if(i == 3){ if(ds >= 1 && hs >= 1 && cs >= 1 && ss >= 1){ value = value * 2; lastrule = 3; modified += 1; } } else if(i == 4){ int dif = (cs + ss) - (hs + ds); if(dif != 0){ value += abs(dif); lastrule = 4; modified += 1; } } else if(i == 5){ int add = 0; if(value % 2 == 0){ for(int div = 1; div <= abs(value); div++){ if(value % div == 0) add += div; } value += add; lastrule = 5; modified += 1; } } else if(i == 6){ int rank7 = 0; rep(i, k.size()){ if(k[i].fi == "7") rank7++; } if(rank7 == 4){ value -= 121; lastrule = 6; modified++; } } else if(i == 7){ if(value >= 0){ int lowest = 1234; rep(i, k.size()){ lowest = min(lowest, score(k[i].fi)); } value += lowest; lastrule = 7; modified++; } } else if(i == 8){ if(value < 0){ value = value * (-1); lastrule = 8; modified++; } } else if(i == 9){ if(ds >= 3){ value += 1; rep(i, k.size()){ if(k[i].fi == "6") k[i].fi = "9"; else if(k[i].fi == "9") k[i].fi = "6"; else if(k[i].fi == "2") k[i].fi = "5"; else if(k[i].fi == "5") k[i].fi = "2"; } lastrule = 9; modified++; } } else if(i == 10){ vector nw; int as = 0; rep(i, k.size()){ rep(j, ord.size()){ if(k[i].fi == ord[j].fi){ nw.push_back(ord[j].se); if(k[i].fi == "A") as++; break; } } } sort(nw.begin(), nw.end()); bool can = false; for(int i = 0; i < (int)nw.size()-4; i++){ int first = nw[i]; bool ok = true; for(int j = 0; j < 5; j++){ if(nw[i+j] != nw[i] + j){ ok = false; break; } } if(ok){ can = true; break; } } if(can){ value += 5*as; lastrule = 10; modified += 1; } } else if(i == 11){ if(modified >= 8){ int ones = 0; for(int i = 0; i < 32; i++){ //ZKONTROLOVAT if((value & (1 << i)) > 0){ ones+=1; } } //MOZNA KDYZ ONES JE NULA TAK NOT MODIFY value += ones; lastrule = 11; modified++; } } else if(i == 12){ int twos = 0; rep(i, k.size()){ if(k[i].fi == "2"){ twos += 1; } } if(twos > 0 && lastrule != -1){ rule(lastrule); lastrule = 12; modified+=1; } } else if(i == 13){ int twos = 0; rep(i, k.size()){ if(k[i].fi == "2"){ twos += 1; } } if(twos > 0){ value += value; lastrule = 13; modified++; } } } int main(void){ rep(i, 5){ string c; cin >> c; if(c[0] == '1'){ string f = {c[0], c[1]}; string s = {c[2]}; k.push_back({f,s}); } else{ string f = {c[0]}; string s = {c[1]}; k.push_back({f,s}); } //cout << k[i].first << " " << k[i].second << endl; } rep(i, 5){ value += score(k[i].fi); } for(int r = 1; r < 14; r++){ rule(r); } cout << value << endl; return 0; }