Go to diff to previous submission
#include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <memory.h> #include <cstring> #include <string> #include <map> #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define FI(i,b) FOR(i,0,b) #define V(t) vector < t > #define pb push_back #define MEMS(a,b) memset((a),(b),sizeof(a)) #define U unsigned #define LL long long #define pnt pair<int,int> #define mp make_pair using namespace std; map<char,int> mm; vector<vector<pnt > > players; pair<int,vector<int> > have[20]; pair<bool, vector<int> > isOneCard(vector<pnt > a) { vector<int > b; FOR(i,0,5) b.push_back(a[i].first); return mp(true,b); } pair<bool, vector<int> > isPair(vector<pnt > a) { vector<int> b; FOR(i,0,(int)a.size()-1) { if (a[i].first==a[i+1].first) { b.push_back(a[i].first); FOR(j,0,(int)a.size()) { if ((j!=i) && (j!=i+1) && (b.size()!=4)) b.push_back(a[j].first); } return mp(true,b); } } return mp(false,b); } pair<bool, vector<int> > isTwoPairs(vector<pnt > a) { vector<int> b; FOR(i,0,(int)a.size()-1) { if (a[i].first==a[i+1].first) { FOR(j,i+2,(int)a.size()-1) if (a[j].first==a[j+1].first) { b.push_back(a[i].first); b.push_back(a[j].first); FOR(k,0,a.size()) { if ((k!=i) && (k!=i+1) && (k!=j) && (k!=j+1) && (b.size()!=3)) b.push_back(a[k].first); } return mp(true,b); } } } return mp(false,b); } pair<bool, vector<int> > isThree(vector<pnt > a) { vector<int> b; FOR(i,0,(int)a.size()-2) { if ((a[i].first==a[i+1].first) && (a[i].first==a[i+2].first)) { b.push_back(a[i].first); FOR(j,0,(int)a.size()) { if ((j!=i) && (j!=i+1) && (j!=i+2) && (b.size()!=3)) b.push_back(a[j].first); } return mp(true,b); } } return mp(false,b); } pair<bool, vector<int> > isStraight(vector<pnt > a) { vector<int > b; FOR(i,0,a.size()-4) { bool f=true; FOR(j,0,4) if (a[i+j].first!=a[i+j+1].first+1) { f=false; break; } if (f) { b.push_back(a[i].first); return mp(true,b); } } bool isace=false; FOR(i,0,a.size()) if (a[i].first==14) isace=true; if (!isace) return mp(false,b); FOR(i,0,a.size()-4) { if (a[i].first!=5) continue; bool f=true; FOR(j,0,3) if (a[i+j].first!=a[i+j+1].first+1) { f=false; break; } if (f) { b.push_back(a[i].first); return mp(true,b); } } return mp(false,b); } pair<bool, vector<int> > isFlush(vector<pnt > a) { //FOR(i,0,a.size()) // cout<<a[i].second<<" "; //cout<<endl; vector<int> b; FOR(i1,0,a.size()) FOR(i2,i1+1,a.size()) FOR(i3,i2+1,a.size()) FOR(i4,i3+1,a.size()) FOR(i5,i4+1,a.size()) { if ((a[i1].second==a[i2].second) && (a[i1].second==a[i3].second) && (a[i1].second==a[i4].second) && (a[i1].second==a[i5].second)) { /*cout<<a[i1].first<<" "; cout<<a[i2].first<<" "; cout<<a[i3].first<<" "; cout<<a[i4].first<<" "; cout<<a[i5].first<<" ";*/ b.push_back(a[i1].first); b.push_back(a[i2].first); b.push_back(a[i3].first); b.push_back(a[i4].first); b.push_back(a[i5].first); return mp(true,b); } } return mp(false,b); } pair<bool, vector<int> > isFullHouse(vector<pnt > a) { vector<int> b; FOR(i,0,(int)a.size()-2) { if ((a[i].first==a[i+1].first) && (a[i].first==a[i+2].first)) FOR(j,0,(int)a.size()-1) if ((j!=i) && (j!=i+1) && (j!=i+2) && (j+1!=i) && (j+1!=i+1) && (j+1!=i+2) && (a[j].first==a[j+1].first)) { b.push_back(a[i].first); b.push_back(a[j].first); return mp(true,b); } } return mp(false,b); } pair<bool, vector<int> > isPoker(vector<pnt > a) { vector<int> b; FOR(i,0,(int)a.size()-3) { if ((a[i].first==a[i+1].first) && (a[i].first==a[i+2].first) && (a[i].first==a[i+3].first)) { b.push_back(a[i].first); FOR(j,0,(int)a.size()) { if ((j!=i) && (j!=i+1) && (j!=i+2) && (j!=i+3) && (b.size()!=2)) b.push_back(a[j].first); } return mp(true,b); } } return mp(false,b); } pair<bool, vector<int> > isRoyalFlush(vector<pnt > a) { vector<int> b; FOR(i1,0,a.size()) FOR(i2,i1+1,a.size()) FOR(i3,i2+1,a.size()) FOR(i4,i3+1,a.size()) FOR(i5,i4+1,a.size()) { if ((a[i1].second==a[i2].second) && (a[i1].second==a[i3].second) && (a[i1].second==a[i4].second) && (a[i1].second==a[i5].second)) { /*cout<<a[i1].first<<" "; cout<<a[i2].first<<" "; cout<<a[i3].first<<" "; cout<<a[i4].first<<" "; cout<<a[i5].first<<" ";*/ if ((a[i1].first-1==a[i2].first) && (a[i2].first-1==a[i3].first) && (a[i3].first-1==a[i4].first) && (a[i4].first-1==a[i5].first)) { b.push_back(a[i1].first); b.push_back(a[i2].first); b.push_back(a[i3].first); b.push_back(a[i4].first); b.push_back(a[i5].first); return mp(true,b); } if ((a[i1].first==14) && (a[i5].first==2) && (a[i2].first-1==a[i3].first) && (a[i3].first-1==a[i4].first) && (a[i4].first-1==a[i5].first)) { b.push_back(a[i2].first); b.push_back(a[i3].first); b.push_back(a[i4].first); b.push_back(a[i5].first); b.push_back(a[i1].first); return mp(true,b); } } } return mp(false,b); } int main() { FOR(i,2,10) mm['0'+i]=i; mm['X']=10; mm['J']=11; mm['Q']=12; mm['K']=13; mm['A']=14; //sort them all!!! /*vector<pnt > b; FOR(i,0,7) string s; cin>>s; //cout<<s<<endl; int v2=0; if (s[1]=='d') v2=1; if (s[1]=='h') v2=2; if (s[1]=='s') v2=3; c.push_back(mp(mm[s[0]],v2)); } { string s; cin>>s; //cout<<s<<endl; int v2=0; if (s[1]=='d') v2=1; if (s[1]=='h') v2=2; if (s[1]=='s') v2=3; b.push_back(mp(mm[s[0]],v2)); //cout<<v2<<endl; } sort(b.rbegin(),b.rend()); pair<bool,vector<int> > a=isRoyalFlush(b); cout<<a.first<<endl; FOR(i,0,a.second.size()) cout<<a.second[i]<<" "; cout<<endl;*/ int n; while (scanf("%d",&n)!=EOF) { players.clear(); players.resize(n); vector<pnt > c; FOR(it,0,5) { string s; cin>>s; //cout<<s<<endl; int v2=0; if (s[1]=='d') v2=1; if (s[1]=='h') v2=2; if (s[1]=='s') v2=3; c.push_back(mp(mm[s[0]],v2)); } FOR(i,0,n) { players[i]=c; //cout<<v2<<endl; FOR(it,0,2) { string s; cin>>s; //cout<<s<<endl; int v2=0; if (s[1]=='d') v2=1; if (s[1]=='h') v2=2; if (s[1]=='s') v2=3; players[i].push_back(mp(mm[s[0]],v2)); } sort(players[i].rbegin(),players[i].rend()); } FOR(i,0,n) { pair<bool, vector<int> > tmp; tmp=isRoyalFlush(players[i]); if (tmp.first) { have[i].first=9; have[i].second=tmp.second; continue; } tmp=isPoker(players[i]); if (tmp.first) { have[i].first=8; have[i].second=tmp.second; continue; } tmp=isFullHouse(players[i]); if (tmp.first) { have[i].first=7; have[i].second=tmp.second; continue; } tmp=isFlush(players[i]); if (tmp.first) { have[i].first=6; have[i].second=tmp.second; continue; } tmp=isStraight(players[i]); if (tmp.first) { have[i].first=5; have[i].second=tmp.second; continue; } tmp=isThree(players[i]); if (tmp.first) { have[i].first=4; have[i].second=tmp.second; continue; } tmp=isTwoPairs(players[i]); if (tmp.first) { have[i].first=3; have[i].second=tmp.second; continue; } tmp=isPair(players[i]); if (tmp.first) { have[i].first=2; have[i].second=tmp.second; continue; } tmp=isOneCard(players[i]); if (tmp.first) { have[i].first=1; have[i].second=tmp.second; continue; } } vector<int> res; FOR(i,0,n) { bool f=true; FOR(j,0,n) if (i!=j) if (have[i]<have[j]) f=false; if (f) res.push_back(i+1); } FOR(i,0,res.size()) { if (i) printf(" "); printf("%d",res[i]); } printf("\n"); } return 0; }
--- c4.s1069.cteam050.rhino.cpp.0.ololo.cpp +++ c4.s1108.cteam050.rhino.cpp.0.temp.cpp @@ -59,6 +59,6 @@ if (a[j].first==a[j+1].first) { - b.push_back(a[j].first); b.push_back(a[i].first); + b.push_back(a[j].first); FOR(k,0,a.size()) { @@ -114,5 +114,5 @@ if (!isace) return mp(false,b); - FOR(i,0,a.size()-5) + FOR(i,0,a.size()-4) { if (a[i].first!=5) @@ -169,5 +169,5 @@ if ((a[i].first==a[i+1].first) && (a[i].first==a[i+2].first)) FOR(j,0,(int)a.size()-1) - if ((j!=i) && (j!=i+1) && (j!=i+2) && (a[j].first==a[j+1].first)) + if ((j!=i) && (j!=i+1) && (j!=i+2) && (j+1!=i) && (j+1!=i+1) && (j+1!=i+2) && (a[j].first==a[j+1].first)) { b.push_back(a[i].first); @@ -229,4 +229,5 @@ b.push_back(a[i5].first); b.push_back(a[i1].first); + return mp(true,b); } } @@ -366,5 +367,5 @@ if (tmp.first) { - have[i].first=4; + have[i].first=3; have[i].second=tmp.second; continue; @@ -373,5 +374,5 @@ if (tmp.first) { - have[i].first=4; + have[i].first=2; have[i].second=tmp.second; continue; @@ -380,5 +381,5 @@ if (tmp.first) { - have[i].first=4; + have[i].first=1; have[i].second=tmp.second; continue;