fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef vector<char> vc;
  7.  
  8. vc cards[2];
  9. vc stack;
  10.  
  11. void init(int index, char rank){
  12. cards[index % 2].push_back(rank);
  13. index++;
  14. for(int i=1; i<12; i++){
  15. scanf("%*c%c ", &rank);
  16. cards[index % 2].push_back(rank);
  17. index++;
  18. }
  19. scanf("%*c%c\n", &rank);
  20. cards[index % 2].push_back(rank);
  21. index++;
  22. for(int i=1; i<4; i++){
  23. for(int j=0; j<12; j++){
  24. scanf("%*c%c ", &rank);
  25. cards[index % 2].push_back(rank);
  26. index++;
  27. }
  28. scanf("%*c%c\n", &rank);
  29. cards[index % 2].push_back(rank);
  30. index++;
  31. }
  32. }
  33. bool check_card(char card){
  34. if(card == 'A') return true;
  35. else if(card == 'J') return true;
  36. else if(card == 'Q') return true;
  37. else if(card == 'K') return true;
  38. else return false;
  39. }
  40.  
  41. char play_card(int index){
  42. char rank = cards[index % 2].back();
  43. cards[index % 2].pop_back();
  44. stack.push_back(rank);
  45. cout << "play(): played=" << rank <<", by="<<((index % 2)? "player":"dealer")<< endl;
  46. cout << "Total cards left: dealer=" << cards[0].size()
  47. << ", player=" << cards[1].size()
  48. << ", stack=" << stack.size() << endl;
  49. return rank;
  50. }
  51.  
  52. bool play_face(int &index, char rank){
  53. int total_loops = 0;
  54. if(rank == 'J') total_loops = 1;
  55. else if(rank == 'Q') total_loops = 2;
  56. else if(rank == 'K') total_loops = 3;
  57. else total_loops = 4;
  58.  
  59. bool face_was_put = false;
  60. bool game_over = false;
  61. while(!cards[index % 2].empty() && total_loops > 0){
  62. rank = play_card(index);
  63. total_loops--;
  64. if(check_card(rank)){
  65. index++;
  66. face_was_put = true;
  67. game_over = play_face(index, rank);
  68. break;
  69. }
  70. } // breaks in 3 case - face was put, complete loop or no more cards
  71.  
  72. if(cards[index % 2].empty()){
  73. // index--;
  74. return true;
  75. }
  76. else if(!face_was_put && !game_over){
  77. index--;
  78. reverse(stack.begin(), stack.end());
  79. cards[index % 2].insert(cards[index % 2].begin(), stack.begin(), stack.end());
  80. stack.clear();
  81. return false;
  82. }
  83. }
  84.  
  85. void play(int &index){
  86. while(!cards[0].empty() && !cards[1].empty()){
  87. char rank = play_card(index);
  88. index++;
  89. if(check_card(rank)){
  90. play_face(index, rank);
  91. }
  92. }
  93. }
  94.  
  95. int main() {
  96. while(true){
  97. cards[0].clear();
  98. cards[1].clear();
  99. stack.clear();
  100. char suit, rank;
  101. scanf("%c%c ", &suit, &rank);
  102. if(suit == '#') break;
  103. int index=1;
  104. init(index, rank);
  105. cout << "Total cards left: dealer=" << cards[0].size()
  106. << ", player=" << cards[1].size()
  107. << ", stack=" << stack.size() << endl;
  108. play(index);
  109. printf("%d %d\n", index % 2 + 1, cards[index%2].size());
  110. }
  111. return 0;
  112. }
Success #stdin #stdout 0.01s 5620KB
stdin
HA H3 H4 CA SK S5 C5 S6 C4 D5 H7 HJ HQ
D4 D7 SJ DT H6 S9 CT HK C8 C9 D6 CJ C6
S8 D8 C2 S2 S3 C7 H5 DJ S4 DQ DK D9 D3
H9 DA SA CK CQ C3 HT SQ H8 S7 ST H2 D2
#
stdout
Total cards left: dealer=26, player=26, stack=0
play(): played=2, by=player
Total cards left: dealer=26, player=25, stack=1
play(): played=2, by=dealer
Total cards left: dealer=25, player=25, stack=2
play(): played=7, by=player
Total cards left: dealer=25, player=24, stack=3
play(): played=T, by=dealer
Total cards left: dealer=24, player=24, stack=4
play(): played=Q, by=player
Total cards left: dealer=24, player=23, stack=5
play(): played=8, by=dealer
Total cards left: dealer=23, player=23, stack=6
play(): played=T, by=dealer
Total cards left: dealer=22, player=23, stack=7
play(): played=3, by=player
Total cards left: dealer=22, player=29, stack=1
play(): played=Q, by=dealer
Total cards left: dealer=21, player=29, stack=2
play(): played=K, by=player
Total cards left: dealer=21, player=28, stack=3
play(): played=A, by=dealer
Total cards left: dealer=20, player=28, stack=4
play(): played=A, by=player
Total cards left: dealer=20, player=27, stack=5
play(): played=9, by=dealer
Total cards left: dealer=19, player=27, stack=6
play(): played=9, by=dealer
Total cards left: dealer=18, player=27, stack=7
play(): played=Q, by=dealer
Total cards left: dealer=17, player=27, stack=8
play(): played=3, by=player
Total cards left: dealer=17, player=26, stack=9
play(): played=K, by=player
Total cards left: dealer=17, player=25, stack=10
play(): played=J, by=dealer
Total cards left: dealer=16, player=25, stack=11
play(): played=4, by=player
Total cards left: dealer=16, player=24, stack=12
play(): played=7, by=dealer
Total cards left: dealer=27, player=24, stack=1
play(): played=5, by=player
Total cards left: dealer=27, player=23, stack=2
play(): played=2, by=dealer
Total cards left: dealer=26, player=23, stack=3
play(): played=3, by=player
Total cards left: dealer=26, player=22, stack=4
play(): played=8, by=dealer
Total cards left: dealer=25, player=22, stack=5
play(): played=2, by=player
Total cards left: dealer=25, player=21, stack=6
play(): played=6, by=dealer
Total cards left: dealer=24, player=21, stack=7
play(): played=8, by=player
Total cards left: dealer=24, player=20, stack=8
play(): played=6, by=dealer
Total cards left: dealer=23, player=20, stack=9
play(): played=J, by=player
Total cards left: dealer=23, player=19, stack=10
play(): played=8, by=dealer
Total cards left: dealer=22, player=19, stack=11
play(): played=9, by=player
Total cards left: dealer=22, player=29, stack=1
play(): played=T, by=dealer
Total cards left: dealer=21, player=29, stack=2
play(): played=K, by=player
Total cards left: dealer=21, player=28, stack=3
play(): played=6, by=dealer
Total cards left: dealer=20, player=28, stack=4
play(): played=J, by=dealer
Total cards left: dealer=19, player=28, stack=5
play(): played=9, by=player
Total cards left: dealer=19, player=27, stack=6
play(): played=4, by=dealer
Total cards left: dealer=24, player=27, stack=1
play(): played=T, by=player
Total cards left: dealer=24, player=26, stack=2
play(): played=J, by=dealer
Total cards left: dealer=23, player=26, stack=3
play(): played=7, by=player
Total cards left: dealer=23, player=25, stack=4
play(): played=5, by=dealer
Total cards left: dealer=26, player=25, stack=1
play(): played=Q, by=player
Total cards left: dealer=26, player=24, stack=2
play(): played=6, by=dealer
Total cards left: dealer=25, player=24, stack=3
play(): played=5, by=dealer
Total cards left: dealer=24, player=24, stack=4
play(): played=7, by=player
Total cards left: dealer=24, player=27, stack=1
play(): played=A, by=dealer
Total cards left: dealer=23, player=27, stack=2
play(): played=4, by=player
Total cards left: dealer=23, player=26, stack=3
play(): played=5, by=player
Total cards left: dealer=23, player=25, stack=4
play(): played=K, by=player
Total cards left: dealer=23, player=24, stack=5
play(): played=3, by=dealer
Total cards left: dealer=22, player=24, stack=6
play(): played=3, by=dealer
Total cards left: dealer=21, player=24, stack=7
play(): played=Q, by=dealer
Total cards left: dealer=20, player=24, stack=8
play(): played=4, by=player
Total cards left: dealer=20, player=23, stack=9
play(): played=A, by=player
Total cards left: dealer=20, player=22, stack=10
play(): played=K, by=dealer
Total cards left: dealer=19, player=22, stack=11
play(): played=2, by=player
Total cards left: dealer=19, player=21, stack=12
play(): played=2, by=player
Total cards left: dealer=19, player=20, stack=13
play(): played=7, by=player
Total cards left: dealer=19, player=19, stack=14
play(): played=A, by=dealer
Total cards left: dealer=32, player=19, stack=1
play(): played=T, by=player
Total cards left: dealer=32, player=18, stack=2
play(): played=Q, by=player
Total cards left: dealer=32, player=17, stack=3
play(): played=A, by=dealer
Total cards left: dealer=31, player=17, stack=4
play(): played=8, by=player
Total cards left: dealer=31, player=16, stack=5
play(): played=T, by=player
Total cards left: dealer=31, player=15, stack=6
play(): played=7, by=player
Total cards left: dealer=31, player=14, stack=7
play(): played=5, by=player
Total cards left: dealer=31, player=13, stack=8
play(): played=9, by=dealer
Total cards left: dealer=38, player=13, stack=1
play(): played=2, by=player
Total cards left: dealer=38, player=12, stack=2
play(): played=9, by=dealer
Total cards left: dealer=37, player=12, stack=3
play(): played=3, by=player
Total cards left: dealer=37, player=11, stack=4
play(): played=Q, by=dealer
Total cards left: dealer=36, player=11, stack=5
play(): played=8, by=player
Total cards left: dealer=36, player=10, stack=6
play(): played=2, by=player
Total cards left: dealer=36, player=9, stack=7
play(): played=3, by=dealer
Total cards left: dealer=42, player=9, stack=1
play(): played=6, by=player
Total cards left: dealer=42, player=8, stack=2
play(): played=K, by=dealer
Total cards left: dealer=41, player=8, stack=3
play(): played=8, by=player
Total cards left: dealer=41, player=7, stack=4
play(): played=6, by=player
Total cards left: dealer=41, player=6, stack=5
play(): played=J, by=player
Total cards left: dealer=41, player=5, stack=6
play(): played=J, by=dealer
Total cards left: dealer=40, player=5, stack=7
play(): played=8, by=player
Total cards left: dealer=40, player=4, stack=8
play(): played=4, by=dealer
Total cards left: dealer=47, player=4, stack=1
play(): played=5, by=player
Total cards left: dealer=47, player=3, stack=2
play(): played=9, by=dealer
Total cards left: dealer=46, player=3, stack=3
play(): played=Q, by=player
Total cards left: dealer=46, player=2, stack=4
play(): played=T, by=dealer
Total cards left: dealer=45, player=2, stack=5
play(): played=K, by=dealer
Total cards left: dealer=44, player=2, stack=6
play(): played=6, by=player
Total cards left: dealer=44, player=1, stack=7
play(): played=5, by=player
Total cards left: dealer=44, player=0, stack=8
2 0