Advertisement
Guest User

j.cpp

a guest
Sep 18th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define vi vector<int>
  4. #define pb push_back
  5. #define INF (int32_t(1e9)+1)
  6. using namespace std;
  7.  
  8. struct player{
  9.     vi cards;
  10.  
  11.     player() : cards(vi(14, 0)) {}
  12.  
  13.     bool win(){
  14.         for(auto i:cards){
  15.             if(i >= 4)
  16.                 return true;
  17.         }
  18.         return false;
  19.     }
  20.  
  21.     void add_card(int i){
  22.         cards[i]++;
  23.     }
  24.  
  25.     int get_card(bool wildcard){
  26.         int res;
  27.         if(wildcard and cards[0])
  28.             res = 0;
  29.         else{
  30.             res = 1;
  31.             for(int i=2; i<14; ++i){
  32.                 if(!cards[res] or (cards[i] > 0 and cards[i] < cards[res]))
  33.                     res = i;
  34.             }
  35.         }
  36.         cards[res]--;
  37.         return res;
  38.     }
  39. };
  40.  
  41.  
  42. int32_t main(){
  43.     int n, k;
  44.     cin >> n >> k;
  45.     k--;
  46.     map<char, int> ctoint = {
  47.         {'A', 1},
  48.         {'D', 10},
  49.         {'Q', 11},
  50.         {'J', 12},
  51.         {'K', 13}
  52.     };
  53.     for(int i=2; i<=9; ++i)
  54.         ctoint[(char)('0'+i)] = i;
  55.  
  56.     vector<player> v(n, player());
  57.     for(int i=0; i<n; ++i){
  58.         for(int j=0; j<4; ++j){
  59.             char c;
  60.             cin >> c;
  61.             v[i].add_card(ctoint[c]);
  62.         }
  63.         if(v[i].win() and i != k){
  64.             cout << i+1 << endl;
  65.             return 0;
  66.         }
  67.     }
  68.  
  69.     int card = 0;
  70.     while(true){
  71.         bool wildcard = card != 0;
  72.         v[k].add_card(card);
  73.         card = v[k].get_card(wildcard);
  74.         if(v[k].win())
  75.             break;
  76.         k = (k+1)%n;
  77.     }
  78.     cout << k+1 << endl;
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement