Language: C

#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <string>
#include <cmath>
#include <cstdio>
#include <cctype>
#include <ctime>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <complex>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cwchar>
#include <cwctype>
#include <exception>
#include <locale>
#include <numeric>
#include <new>
#include <stdexcept>
#include <limits>
#include <valarray>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <list>
#include <utility>
#include <bitset>
#include <algorithm>
#include <functional>
using namespace std;
inline bool cmp(const pair<int,int> &a,const pair<int,int> &b)
{
	return a>b;
}
char tmt[100]="23456789TJQKA";
char tmt2[100]="SDCH";
struct xd
{
	vector<pair<int,int> > x;
	vector<pair<int,int> > ca;
	map<int,int> cnt;
	int r;
	inline bool operator > (const xd& b)const
	{
		if(r!=b.r)
		{
			return r>b.r;
		}
		return x>b.x;
	}
	inline bool issf()
	{
		for(int i=1;i<5;i++)
		{
			if(ca[0].second!=ca[i].second)
			{
				return 0;
			}
		}
		return 1;
	}
	inline bool isst()
	{
		for(int i=1;i<5;i++)
		{
			if(ca[i].first!=ca[i-1].first+1)
			{
				return 0;
			}
		}
		return 1;
	}
	inline bool isrs()
	{
		return ca[0].first==2 and ca[1].first==3 and ca[2].first==4 and ca[3].first==5 and ca[4].first==14;
	}
	inline void calc()
	{
		int i;
		cnt.clear();
		sort(ca.begin(),ca.end());
		bool sf=issf();
		bool st=isst();
		bool rs=isrs();
		if(rs)
		{
			ca[4].first=1;
			pair<int,int> t=ca[4];
			for(i=4;i>0;i--)
			{
				ca[i]=ca[i-1];
			}
			ca[0]=t;
		}
		for(i=0;i<5;i++)
		{
			cnt[ca[i].first]++;
		}
		map<int,int>::iterator it;
		x.clear();
		for(it=cnt.begin();it!=cnt.end();it++)
		{
			x.push_back(make_pair(it->second,it->first));
		}
		sort(x.begin(),x.end(),cmp);
		if(sf)
		{
			if(st or rs)
			{
				r=9;
			}
			else
			{
				r=6;
			}
		}
		else
		{
			if(rs or st)
			{
				r=5;
			}
			else
			{
				if(x.size()==2)
				{
					if(x[0].first==4)
					{
						r=8;
					}
					else
					{
						r=7;
					}
				}
				else if(x.size()==3)
				{
					if(x[0].first==3)
					{
						r=4;
					}
					else
					{
						r=3;
					}
				}
				else if(x.size()==4)
				{
					r=2;
				}
				else
				{
					r=1;
				}
			}
		}
	}
};
inline int ton(char c)
{
	int i;
	for(i=2;i<=14;i++)
	{
		if(tmt[i]==c)
		{
			return i;
		}
	}
}
inline int tons(char c)
{
	for(int i=0;i<4;i++)
	{
		if(tmt2[i]==c)
		{
			return i;
		}
	}
}
bool used[105];
char in[10];
inline pair<int,int> getc()
{
	scanf("%s",in);
	if(in[0]=='#')
	{
		return make_pair(-1,-1);
	}
	pair<int,int> p=make_pair(ton(in[1]),tons(in[0]));
	used[(p.first-2)*4+p.second]=1;
	return p;
}
pair<int,int> mc[10],yc[10],riv[10];
int cnt;
int wc;
xd ma,mm1,mm2;
pair<int,int> ch[10];
inline void dfs2(int np,int l)
{
	if(l==5)
	{
		xd x;
		x.ca.resize(5);
		for(int i=0;i<5;i++)
		{
			x.ca[i]=ch[i];
		}
		x.calc();
		if(x>ma)
		{
			ma=x;
		}
		return;
	}
	if(np==7)
	{
		return;
	}
	dfs2(np+1,l);
	ch[l]=riv[np];
	dfs2(np+1,l+1);
}
inline void dfs(int np,int l)
{
	if(l==5)
	{
		cnt++;
		ma.r=-1;
		riv[5]=mc[0];
		riv[6]=mc[1];
		dfs2(0,0);
		mm1=ma;
		ma.r=-1;
		riv[5]=yc[0];
		riv[6]=yc[1];
		dfs2(0,0);
		mm2=ma;
		if(mm1>mm2)
		{
			wc++;
		}
		return;
	}
	if(np==52)
	{
		return;
	}
	dfs(np+1,l);
	if(used[np])
	{
		return;
	}
	riv[l]=make_pair(np/4+2,np%4);
	dfs(np+1,l+1);
}
int main()
{
	int i;
	while(1)
	{
		memset(used,0,sizeof(used));
		mc[0]=getc();
		if(mc[0].first==-1)
		{
			break;
		}
		mc[1]=getc();
		for(i=0;i<2;i++)
		{
			yc[i]=getc();
		}
		for(i=0;i<3;i++)
		{
			riv[i]=getc();
		}
		cnt=0;
		wc=0;
		dfs(0,3);
		printf("%.20lf\n",wc/(double)cnt);
	}
	return 0;
}


Compiler output:
main.c:1:10: fatal error: iostream: No such file or directory
    1 | #include <iostream>
      |          ^~~~~~~~~~
compilation terminated.