Language: C++

#include<bits/stdc++.h>
using namespace std;

char c1[4]={'S','H','D','C'};
char c2[13]={'>','=','<',';',':','9','8','7','6','5','4','3','2'};

vector<string> cards;
set<string> used;

void init(){
  for(int i=0;i<4;i++)
    for(int j=0;j<13;j++){
      string s, t;
      s+=c1[i];
      t+=c2[j];
      cards.push_back(s+t);
    }
}

string change(string s){
  
  if(s[1]=='A') s[1] = '>';
  if(s[1]=='K') s[1] = '=';
  if(s[1]=='Q') s[1] = '<';
  if(s[1]=='J') s[1] = ';';
  if(s[1]=='T') s[1] = ':';
  
  return s;
}

bool is0(const vector<string> &c){ // Royal straight flush

  char suit = c[0][0];
  
  for(int i=0;i<c.size();i++)
    if( suit != c[i][0] ) return false;
  
  sort(c.begin(), c.end(), greater<string>());
  
  for(int i=0;i<c.size();i++)
    if( c[i][1] != c2[i] ) return false;
  
  return true;
}

bool is1(const vector<string> &c){ // Straight flush
  
  char suit = c[0][0];
  
  for(int i=0;i<c.size();i++)
    if( suit != c[i][0] ) return false;
  
  sort(c.begin(), c.end());
  
  if(c[0][1]=='2'&&c[1][1]=='3'&&c[2][1]=='4'&&c[3][1]=='5'&&c[4][1]=='>') return true;
  
  for(int i=0;i<c.size()-1;i++)
    if( c[i][1] + 1 != c[i+1][1] ) return false;
  
  return true;
}

bool is2(vector<string> c){ // Four of a kind

  for(int i=0;i<c.size();i++){
    
    int cnt = 0;
    
    for(int j=0;j<c.size();j++)
      if( c[i][1] == c[j][1] ) cnt++;
    
    if( cnt == 4 ) return true;
  }
  
  return false;
}

bool is3(vector<string> c){ // Full house

  for(int i=0;i<c.size();i++){
    
    int cnt = 0;
    
    for(int j=0;j<c.size();j++)
      if( c[i][1] == c[j][1] ) cnt++;
    
    if( cnt == 3 ){

      vector<char> comp;
      
      for(int j=0;j<c.size();j++)
	if( c[i][1] != c[j][1] ) comp.push_back( c[j][1] );
      
      if( comp[0] == comp[1] ) return true;
    }
    
  }

  return false;
}

bool is4(vector<string> c){ // Flush
  
  char suit = c[0][0];
  
  for(int i=0;i<c.size();i++)
    if( suit != c[i][0] ) return false;
  
  return true;
}

bool is5(vector<string> c){ // Straight

  vector<char> A;
  
  for(int i=0;i<c.size();i++) A.push_back(c[i][1]);
  
  sort(A.begin(), A.end());
  
  if(A[0]=='2'&&A[1]=='3'&&A[2]=='4'&&A[3]=='5'&&A[4]=='>') return true;
  
  for(int i=0;i<A.size()-1;i++)
    if( A[i] + 1 != A[i+1] ) return false;
  
  return true;
}

bool is6(vector<string> c){ // Three of a kind
  
  for(int i=0;i<c.size();i++)

    for(int j=i+1;j<c.size();j++)
      
      for(int k=j+1;k<c.size();k++)
	
	if( c[i][1] == c[j][1] && c[j][1] == c[k][1] ) return true;
  
  return false;
}

bool is7(vector<string> c){ // Two pairs
  
  int C[400] = {};
  
  for(int i=0;i<c.size();i++) C[c[i][1]]++;
  
  int cnt = 0;
  
  for(int i=0;i<400;i++)
    if( C[i] == 2 ) cnt++;
  
  return cnt == 2;
}

bool is8(vector<string> c){ // One pair
  
  for(int i=0;i<c.size();i++)
    
    for(int j=i+1;j<c.size();j++)
      
      if( c[i][1] == c[j][1] ) return true;
  
  return false;
}

int flag;

vector<string> MAX1(vector<string> A, vector<string> B){ // Straight flush
  
  priority_queue<char> a, b;
  
  sort(A.begin(), A.end());
  sort(B.begin(), B.end());
  
  for(int i=0;i<A.size();i++) a.push(A[i][1]);
  for(int i=0;i<B.size();i++) b.push(B[i][1]);
  
  if(A[0][1]=='2'&&A[4][1]=='>') a.pop();
  if(B[0][1]=='2'&&B[4][1]=='>') b.pop();
  
  if(a.top()>b.top()){
    flag = 1;
    return A;
  }
  return B;
}

vector<string> MAX2(vector<string> A, vector<string> B){ // Four of a kind
  
  int C1[400] = {}, C2[400] = {};
  
  for(int i=0;i<A.size();i++) C1[A[i][1]]++;
  for(int i=0;i<B.size();i++) C2[B[i][1]]++;
  
  char a, b, c, d;
  
  for(int i=0;i<A.size();i++)
    if(C1[A[i][1]]==4) a = A[i][1];
    else b = A[i][1];
  
  for(int i=0;i<B.size();i++)
    if(C2[B[i][1]]==4) c = B[i][1];
    else d = B[i][1];
  
  if( a > c ){
    flag = 1;
    return A;
  }
  if( a < c ) return B;
  if( b > d ){
    flag = 1;
    return A;
  }
  return B;
}

vector<string> MAX3(vector<string> A, vector<string> B){ // Full house
  
  int C1[400] = {}, C2[400] = {};
  
  for(int i=0;i<A.size();i++) C1[A[i][1]]++;
  for(int i=0;i<B.size();i++) C2[B[i][1]]++;
  
  char a, b, c, d;
  
  for(int i=0;i<A.size();i++)
    if(C1[A[i][1]]==3) a = A[i][1];
    else b = A[i][1];

  for(int i=0;i<B.size();i++)
    if(C2[B[i][1]]==3) c = B[i][1];
    else d = B[i][1];
  
  if( a > c ){
    flag = 1;
    return A;
  }
  if( a < c ) return B;
  if( b > d ){
    flag = 1;
    return A;
  }
  return B;
}

vector<string> MAX4(vector<string> A, vector<string> B){ // Flush

  priority_queue<char> a, b;
  
  for(int i=0;i<A.size();i++) a.push(A[i][1]);
  for(int i=0;i<B.size();i++) b.push(B[i][1]);
  
  while(!a.empty()){
    
    if(a.top()>b.top()){
      flag = 1;
      return A;
    }
    if(a.top()<b.top()) return B;

    a.pop(); b.pop();
  }
  
  return A;
}

vector<string> MAX5(vector<string> A, vector<string> B){ // Straight
  
  priority_queue<char> a, b;
  
  int flaga=0, flagb=0;
  
  for(int i=0;i<A.size();i++){
    a.push(A[i][1]);
    if(A[i][1]=='2') flaga=1;
  }
  
  for(int i=0;i<B.size();i++){
    b.push(B[i][1]);
    if(B[i][1]=='2') flagb=1;
  }
  
  if(flaga&&a.top()=='>') a.pop();
  
  if(flagb&&b.top()=='>') b.pop();
  
  if(a.top()>b.top()){
    flag = 1;
    return A;
  }
  return B;
}

vector<string> MAX6(vector<string> A, vector<string> B){ // Three of a kind
  
  priority_queue<char> a, b;
  
  int C1[400] = {}, C2[400] = {};

  int c, d;
  
  for(int i=0;i<A.size();i++) C1[A[i][1]]++;
  for(int i=0;i<B.size();i++) C2[B[i][1]]++;
  
  for(int i=0;i<A.size();i++)
    if(C1[A[i][1]]==3) c = A[i][1];
    else a.push(A[i][1]);
  
  for(int i=0;i<B.size();i++)
    if(C2[B[i][1]]==3) d = B[i][1];
    else b.push(B[i][1]);
  
  if( c > d ){
    flag = 1;
    return A;
  }
  if( c < d ) return B;
  
  while(!a.empty()){
    
    if(a.top()>b.top()){
      flag = 1;
      return A;
    }
    if(a.top()<b.top()) return B;

    a.pop(); b.pop();
  }
  
  return A;
}

vector<string> MAX7(vector<string> A, vector<string> B){ // Two pairs
  
  priority_queue<char> a, b;
    
  int C1[400] = {}, C2[400] = {};

  int c, d;

  for(int i=0;i<A.size();i++) C1[A[i][1]]++;
  for(int i=0;i<B.size();i++) C2[B[i][1]]++; 
 
  for(int i=0;i<A.size();i++)
    if(C1[A[i][1]]==1) c = A[i][1];
    else a.push(A[i][1]);
 
  for(int i=0;i<B.size();i++)
    if(C2[B[i][1]]==1) d = B[i][1];
    else b.push(B[i][1]);
 
  while(!a.empty()){
    
    if(a.top()>b.top()){
      flag = 1;
      return A;
    }
    if(a.top()<b.top()) return B;

    a.pop(); b.pop();
  }
  
  if( c > d ){
    flag = 1;
    return A;
  }
  
  return B;
}

vector<string> MAX8(vector<string> A, vector<string> B){ // One pair
  
  priority_queue<char> a, b;
    
  int C1[400] = {}, C2[400] = {};

  int c, d;

  for(int i=0;i<A.size();i++) C1[A[i][1]]++;
  for(int i=0;i<B.size();i++) C2[B[i][1]]++; 
 
  for(int i=0;i<A.size();i++)
    if(C1[A[i][1]]==2) c = A[i][1];
    else a.push(A[i][1]);
  
  for(int i=0;i<B.size();i++)
    if(C2[B[i][1]]==2) d = B[i][1];
    else b.push(B[i][1]);

  if( c > d ){
    flag = 1;
    return A;
  }
  if( c < d ) return B;
  
  while(!a.empty()){
    
    if(a.top()>b.top()){
      flag = 1;
      return A;
    }
    if(a.top()<b.top()) return B;

    a.pop(); b.pop();
  }

  return A;
}

vector<string> MAX9(vector<string> A, vector<string> B){ // High card
  
  priority_queue<char> a, b;
  
  for(int i=0;i<A.size();i++) a.push(A[i][1]);
  for(int i=0;i<B.size();i++) b.push(B[i][1]);
  
  while(!a.empty()){
    
    if(a.top()>b.top()){
      flag = 1;
      return A;
    }
    if(a.top()<b.top()) return B;
    
    a.pop(); b.pop();
  }
  
  return A;
}

vector<string> memo;

int judge(vector<string> list){
  
  memo.clear();
  
  int res = 9;
  
  for(int i=0;i<list.size();i++){
    
    for(int j=i+1;j<list.size();j++){
      
      vector<string> five;
      
      for(int k=0;k<list.size();k++)
	if( i != k && j != k ) five.push_back(list[k]);
      
      if(memo.size()==0) memo = five;
      
      if(is0(five)){
	if( res > 0 ){
	  res = 0;
	  memo = five;
	}
      }
      else if(is1(five)){
	if( res > 1 ){
	  res = 1;
	  memo = five;
	}
	if(res == 1) memo = MAX1( memo, five );
      }
      else if(is2(five)){
	if( res > 2 ){
	  res = 2;
	  memo = five;
	}
	if(res == 2) memo = MAX2( memo, five );
      }
      else if(is3(five)){
	if( res > 3 ){
	  res = 3;
	  memo = five;
	}
	if(res == 3) memo = MAX3( memo, five );
      }
      else if(is4(five)){
	if( res > 4 ){
	  res = 4;
	  memo = five;
	}
	if(res == 4) memo = MAX4( memo, five );
      }
      else if(is5(five)){
	if( res > 5 ){
	  res = 5;
	  memo = five;
	}
	if(res == 5) memo = MAX5( memo, five );
      }
      else if(is6(five)){
	if( res > 6 ){
	  res = 6;
	  memo = five;
	}
	if(res == 6) memo = MAX6( memo, five );
      }
      else if(is7(five)){
	if( res > 7 ){
	  res = 7;
	  memo = five;
	}
	if(res == 7) memo = MAX7( memo, five );
      }
      else if(is8(five)){
	if( res > 8 ){
	  res = 8;
	  memo = five;
	}
	if(res == 8) memo = MAX8( memo, five );
      }
      else if(res == 9) memo = MAX9( memo, five );
      
    }
    
  }
  
  return res;
}

bool judge2(vector<string> A, vector<string> B, int c){
  
  sort(A.begin(), A.end());
  sort(B.begin(), B.end());
  
  if( !c ) return false;
  
  flag = 0;
  
  if(c==1) MAX1(A, B);
  if(c==2) MAX2(A, B);
  if(c==3) MAX3(A, B);
  if(c==4) MAX4(A, B);
  if(c==5) MAX5(A, B);
  if(c==6) MAX6(A, B);
  if(c==7) MAX7(A, B);
  if(c==8) MAX8(A, B);
  if(c==9) MAX9(A, B);
  
  return flag;
}

vector<string> A, B, C, R;

void solve(){
  
  int sum = 0, cnt = 0;
  
  for(int i=0;i<R.size();i++){
    
    for(int j=i+1;j<R.size();j++){
      
      vector<string> Alist, Blist;
      
      for(int k=0;k<A.size();k++) Alist.push_back(A[k]);
      for(int k=0;k<C.size();k++) Alist.push_back(C[k]);

      Alist.push_back(R[i]);
      Alist.push_back(R[j]);
      
      int a = judge(Alist);
      vector<string> Amemo = memo;
      
      for(int k=0;k<B.size();k++) Blist.push_back(B[k]);
      for(int k=0;k<C.size();k++) Blist.push_back(C[k]);
      Blist.push_back(R[i]);
      Blist.push_back(R[j]);
      
      int b = judge(Blist);
      vector<string> Bmemo = memo;
      
      if( a < b ) cnt++;
      if( a == b && judge2( Amemo, Bmemo , a ) ) cnt++;
      
      sum++;
    }
  }
  
  printf("%.20f\n", 1.0*cnt/sum);
}

int main(){
  
  init();
  
  while(1){
    
    A.clear();
    B.clear();
    C.clear();
    R.clear();
    used.clear();
    
    for(int i=0;i<2;i++){
      string s;
      cin>>s;
      if(s=="#") return 0;
      s = change(s);
      A.push_back(s);
      used.insert(s);
    }
    
    for(int i=0;i<2;i++){
      string s;
      cin>>s;
      s = change(s);
      B.push_back(s);
      used.insert(s);
    }
  
    for(int i=0;i<3;i++){
      string s;
      cin>>s;
      s = change(s);
      C.push_back(s);
      used.insert(s);
    }

    for(int i=0;i<cards.size();i++)
      
      if(!used.count(cards[i])) R.push_back(cards[i]);
    
    solve();
    
  }
  
  return 0;
}



Compiler output:
In file included from /usr/include/c++/14/algorithm:61,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_algo.h: In instantiation of 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]':
/usr/include/c++/14/bits/stl_algo.h:1817:25:   required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]'
 1817 |           std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
      |           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:1908:31:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]'
 1908 |           std::__final_insertion_sort(__first, __last, __comp);
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:4805:18:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = greater<__cxx11::basic_string<char> >]'
 4805 |       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
      |       ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:38:7:   required from here
   38 |   sort(c.begin(), c.end(), greater<string>());
      |   ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:1782:24: error: no match for 'operator=' (operand types are 'const std::__cxx11::basic_string<char>' and 'std::remove_reference<std::__cxx11::basic_string<char>&>::type' {aka 'std::__cxx11::basic_string<char>'})
 1782 |               *__first = _GLIBCXX_MOVE(__val);
      |                        ^
In file included from /usr/include/c++/14/string:54,
                 from /usr/include/c++/14/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:52:
/usr/include/c++/14/bits/basic_string.h:817:7: note: candidate: 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' (near match)
  817 |       operator=(const basic_string& __str)
      |       ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:817:7: note:   passing 'const std::__cxx11::basic_string<char>*' as 'this' argument discards qualifiers
/usr/include/c++/14/bits/basic_string.h:858:7: note: candidate: 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' (near match)
  858 |       operator=(basic_string&& __str)
      |       ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:858:7: note:   passing 'const std::__cxx11::basic_string<char>*' as 'this' argument discards qualifiers
/usr/include/c++/14/bits/basic_string.h:941:8: note: candidate: 'template<class _Tp> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_If_sv<_Tp, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  941 |        operator=(const _Tp& __svt)
      |        ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:941:8: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/14/bits/stl_pair.h:60,
                 from /usr/include/c++/14/bits/stl_algobase.h:64,
                 from /usr/include/c++/14/algorithm:60:
/usr/include/c++/14/type_traits: In substitution of 'template<bool _Cond, class _Tp> using std::enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = std::__cxx11::basic_string<char>&]':
/usr/include/c++/14/bits/basic_string.h:149:8:   required by substitution of 'template<class _CharT, class _Traits, class _Alloc> template<class _Tp, class _Res> using std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_If_sv = std::enable_if_t<((bool)std::__and_<std::is_convertible<const _Tp&, std::basic_string_view<_CharT, _Traits> >, std::__not_<std::is_convertible<const _Tp*, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>*> >, std::__not_<std::is_convertible<const _Tp&, const _CharT*> > >::value), _Res> [with _Tp = std::__cxx11::basic_string<char>; _Res = std::__cxx11::basic_string<char>&; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  149 |         using _If_sv = enable_if_t<
      |               ^~~~~~
/usr/include/c++/14/bits/basic_string.h:941:8:   required by substitution of 'template<class _Tp> std::__cxx11::basic_string<char>::_If_sv<_Tp, std::__cxx11::basic_string<char>&> std::__cxx11::basic_string<char>::operator=(const _Tp&) [with _Tp = std::__cxx11::basic_string<char>]'
  941 |        operator=(const _Tp& __svt)
      |        ^~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:1782:17:   required from 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]'
 1782 |               *__first = _GLIBCXX_MOVE(__val);
      |                        ^
/usr/include/c++/14/bits/stl_algo.h:1817:25:   required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]'
 1817 |           std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
      |           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:1908:31:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]'
 1908 |           std::__final_insertion_sort(__first, __last, __comp);
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:4805:18:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = greater<__cxx11::basic_string<char> >]'
 4805 |       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
      |       ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:38:7:   required from here
   38 |   sort(c.begin(), c.end(), greater<string>());
      |   ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/type_traits:2711:11: error: no type named 'type' in 'struct std::enable_if<false, std::__cxx11::basic_string<char>&>'
 2711 |     using enable_if_t = typename enable_if<_Cond, _Tp>::type;
      |           ^~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h: In instantiation of 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]':
/usr/include/c++/14/bits/stl_algo.h:1817:25:   required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]'
 1817 |           std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
      |           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:1908:31:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<greater<__cxx11::basic_string<char> > >]'
 1908 |           std::__final_insertion_sort(__first, __last, __comp);
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:4805:18:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<const __cxx11::basic_string<char>*, vector<__cxx11::basic_string<char> > >; _Compare = greater<__cxx11::basic_string<char> >]'
 4805 |       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
      |       ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:38:7:   required from here
   38 |   sort(c.begin(), c.end(), greater<string>());
      |   ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/basic_string.h:828:7: note: candidate: 's