Paste Search Dynamic
Recent pastes
findCard
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. // 1: heart, 2:club, 3: diamond, 4: spade
  7.  
  8. int minimumPoint = 13*10;
  9. vector<vector<pair<int, int>>> res;
  10.  
  11.  
  12. int cal(vector<pair<int, int>>& cards) {
  13.     sort(cards.begin(), cards.end());
  14.     //check chuoi
  15.     int n = cards.size();
  16.     int numBreakPoint = 0;
  17.     bool isChuoi = true;
  18.     for(int i = 1; i < n; i++) {
  19.         if(cards[i].second != cards[i-1].second) {
  20.             isChuoi = false;
  21.             break;
  22.         }
  23.         if(cards[i].first != cards[i-1].first + 1) {
  24.             numBreakPoint += 1;
  25.         }
  26.     }
  27.     isChuoi = isChuoi && ((numBreakPoint == 0) || (numBreakPoint == 1 && cards.back().first == 13 && cards[0].first == 1));
  28.     if(isChuoi)
  29.         return 0;
  30.     // check bo same
  31.     bool isBoSame = true;
  32.     for(int i = 1; i < n; i++) {
  33.         if(cards[i].first != cards[i-1].first) {
  34.             isBoSame = false;
  35.             break;
  36.         }
  37.     }
  38.  
  39.     if(isBoSame)
  40.         return 0;
  41.  
  42.     int sum = 0;
  43.     for(int i = 0; i < n; i++) {
  44.         sum += cards[i].first;
  45.     }
  46.  
  47.     return sum;
  48. }
  49. void evaluate(vector<pair<int, int>>& cards, vector<int>& t) {
  50.     vector<vector<pair<int, int>>> x(3);
  51.     int n = cards.size();
  52.     for(int i = 0; i < n; i++)
  53.         x[t[i]].push_back(cards[i]);
  54.    
  55.     int point = cal(x[0]) + cal(x[1]) + cal(x[2]);
  56.     if(point < minimumPoint) {
  57.         minimumPoint = point;
  58.         res = x;
  59.     }
  60. }
  61.  
  62. void recursive(int i, vector<pair<int, int>>& cards, vector<int>& t) {
  63.     if(i == cards.size()) {
  64.         evaluate(cards, t);
  65.         return;
  66.     }
  67.  
  68.     for(int j = 0; j < 3; j++) {
  69.         t[i] = j;
  70.         recursive(i+1, cards, t);
  71.     }
  72.  
  73. }
  74. void findCard(vector<pair<int, int>> cards) {
  75.     vector<pair<int, int>> res;
  76.     vector<int> t(cards.size(), 0);
  77.     recursive(0, cards, t);
  78. }
  79.  
  80. int main() {
  81.     findCard({{1,1}, {2, 1}, {3, 1}, {4, 1}, {2, 2}, {2, 3}, {13, 1}});
  82.     int n = res.size();
  83.     for(int i = 0; i < n; i++) {
  84.         for(pair<int, int> c : res[i]) {
  85.             cout << "|"<<c.first<<"."<<c.second;
  86.         }
  87.         cout << endl;
  88.     }
  89. }
  90.  
  91.  
Parsed in 0.009 seconds