Source code for submission s1194

Go to diff to previous submission

temp.cpp

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <memory.h>
  6. #include <cstring>
  7. #include <string>
  8. #include <map>
  9.  
  10.  
  11. #define FOR(i,a,b) for (int i = (a); i < (b); ++i)
  12. #define FI(i,b) FOR(i,0,b)
  13. #define V(t) vector < t >
  14. #define pb push_back
  15. #define MEMS(a,b) memset((a),(b),sizeof(a))
  16. #define U unsigned
  17. #define LL long long
  18. #define pnt pair<int,int>
  19. #define mp make_pair
  20.  
  21. using namespace std;
  22.  
  23. map<char,int> mm;
  24. vector<vector<pnt > > players;
  25. pair<int,vector<int> > have[20];
  26. pair<bool, vector<int> > isOneCard(vector<pnt > a)
  27. {
  28. vector<int > b;
  29. FOR(i,0,5)
  30. b.push_back(a[i].first);
  31. return mp(true,b);
  32. }
  33. pair<bool, vector<int> > isPair(vector<pnt > a)
  34. {
  35. vector<int> b;
  36. FOR(i,0,(int)a.size()-1)
  37. {
  38. if (a[i].first==a[i+1].first)
  39. {
  40. b.push_back(a[i].first);
  41. FOR(j,0,(int)a.size())
  42. {
  43. if ((j!=i) && (j!=i+1) && (b.size()!=4))
  44. b.push_back(a[j].first);
  45. }
  46. return mp(true,b);
  47. }
  48. }
  49. return mp(false,b);
  50. }
  51. pair<bool, vector<int> > isTwoPairs(vector<pnt > a)
  52. {
  53. vector<int> b;
  54. FOR(i,0,(int)a.size()-1)
  55. {
  56. if (a[i].first==a[i+1].first)
  57. {
  58. FOR(j,i+2,(int)a.size()-1)
  59. if (a[j].first==a[j+1].first)
  60. {
  61. b.push_back(a[i].first);
  62. b.push_back(a[j].first);
  63. FOR(k,0,a.size())
  64. {
  65. if ((k!=i) && (k!=i+1) && (k!=j) && (k!=j+1) && (b.size()!=3))
  66. b.push_back(a[k].first);
  67. }
  68. return mp(true,b);
  69. }
  70. }
  71. }
  72. return mp(false,b);
  73. }
  74. pair<bool, vector<int> > isThree(vector<pnt > a)
  75. {
  76. vector<int> b;
  77. FOR(i,0,(int)a.size()-2)
  78. {
  79. if ((a[i].first==a[i+1].first) && (a[i].first==a[i+2].first))
  80. {
  81. b.push_back(a[i].first);
  82. FOR(j,0,(int)a.size())
  83. {
  84. if ((j!=i) && (j!=i+1) && (j!=i+2) && (b.size()!=3))
  85. b.push_back(a[j].first);
  86. }
  87. return mp(true,b);
  88. }
  89. }
  90. return mp(false,b);
  91. }
  92. pair<bool, vector<int> > isStraight(vector<pnt > a)
  93. {
  94. vector<int> b;
  95. FOR(i1,0,a.size())
  96. FOR(i2,i1+1,a.size())
  97. FOR(i3,i2+1,a.size())
  98. FOR(i4,i3+1,a.size())
  99. FOR(i5,i4+1,a.size())
  100. {
  101. //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))
  102. {
  103. /*cout<<a[i1].first<<" ";
  104. cout<<a[i2].first<<" ";
  105. cout<<a[i3].first<<" ";
  106. cout<<a[i4].first<<" ";
  107. cout<<a[i5].first<<" ";*/
  108. 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))
  109. {
  110. b.push_back(a[i1].first);
  111. b.push_back(a[i2].first);
  112. b.push_back(a[i3].first);
  113. b.push_back(a[i4].first);
  114. b.push_back(a[i5].first);
  115. return mp(true,b);
  116. }
  117. }
  118. }
  119. FOR(i1,0,a.size())
  120. FOR(i2,i1+1,a.size())
  121. FOR(i3,i2+1,a.size())
  122. FOR(i4,i3+1,a.size())
  123. FOR(i5,i4+1,a.size())
  124. 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))
  125. {
  126. b.push_back(a[i2].first);
  127. b.push_back(a[i3].first);
  128. b.push_back(a[i4].first);
  129. b.push_back(a[i5].first);
  130. b.push_back(a[i1].first);
  131. return mp(true,b);
  132. }
  133. return mp(false,b);
  134. }
  135. pair<bool, vector<int> > isFlush(vector<pnt > a)
  136. {
  137. //FOR(i,0,a.size())
  138. // cout<<a[i].second<<" ";
  139. //cout<<endl;
  140. vector<int> b;
  141. FOR(i1,0,a.size())
  142. FOR(i2,i1+1,a.size())
  143. FOR(i3,i2+1,a.size())
  144. FOR(i4,i3+1,a.size())
  145. FOR(i5,i4+1,a.size())
  146. {
  147. 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))
  148. {
  149. /*cout<<a[i1].first<<" ";
  150. cout<<a[i2].first<<" ";
  151. cout<<a[i3].first<<" ";
  152. cout<<a[i4].first<<" ";
  153. cout<<a[i5].first<<" ";*/
  154. b.push_back(a[i1].first);
  155. b.push_back(a[i2].first);
  156. b.push_back(a[i3].first);
  157. b.push_back(a[i4].first);
  158. b.push_back(a[i5].first);
  159. return mp(true,b);
  160. }
  161. }
  162. return mp(false,b);
  163. }
  164. pair<bool, vector<int> > isFullHouse(vector<pnt > a)
  165. {
  166. vector<int> b;
  167. FOR(i,0,(int)a.size()-2)
  168. {
  169. if ((a[i].first==a[i+1].first) && (a[i].first==a[i+2].first))
  170. FOR(j,0,(int)a.size()-1)
  171. 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))
  172. {
  173. b.push_back(a[i].first);
  174. b.push_back(a[j].first);
  175. return mp(true,b);
  176. }
  177.  
  178. }
  179. return mp(false,b);
  180. }
  181. pair<bool, vector<int> > isPoker(vector<pnt > a)
  182. {
  183. vector<int> b;
  184. FOR(i,0,(int)a.size()-3)
  185. {
  186. if ((a[i].first==a[i+1].first) && (a[i].first==a[i+2].first) && (a[i].first==a[i+3].first))
  187. {
  188. b.push_back(a[i].first);
  189. FOR(j,0,(int)a.size())
  190. {
  191. if ((j!=i) && (j!=i+1) && (j!=i+2) && (j!=i+3) && (b.size()!=2))
  192. b.push_back(a[j].first);
  193. }
  194. return mp(true,b);
  195. }
  196. }
  197. return mp(false,b);
  198. }
  199. pair<bool, vector<int> > isRoyalFlush(vector<pnt > a)
  200. {
  201. vector<int> b;
  202. FOR(i1,0,a.size())
  203. FOR(i2,i1+1,a.size())
  204. FOR(i3,i2+1,a.size())
  205. FOR(i4,i3+1,a.size())
  206. FOR(i5,i4+1,a.size())
  207. {
  208. 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))
  209. {
  210. /*cout<<a[i1].first<<" ";
  211. cout<<a[i2].first<<" ";
  212. cout<<a[i3].first<<" ";
  213. cout<<a[i4].first<<" ";
  214. cout<<a[i5].first<<" ";*/
  215. 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))
  216. {
  217. b.push_back(a[i1].first);
  218. b.push_back(a[i2].first);
  219. b.push_back(a[i3].first);
  220. b.push_back(a[i4].first);
  221. b.push_back(a[i5].first);
  222. return mp(true,b);
  223. }
  224. }
  225. }
  226. FOR(i1,0,a.size())
  227. FOR(i2,i1+1,a.size())
  228. FOR(i3,i2+1,a.size())
  229. FOR(i4,i3+1,a.size())
  230. FOR(i5,i4+1,a.size())
  231. 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))
  232. {
  233. 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))
  234. {
  235. b.push_back(a[i2].first);
  236. b.push_back(a[i3].first);
  237. b.push_back(a[i4].first);
  238. b.push_back(a[i5].first);
  239. b.push_back(a[i1].first);
  240. return mp(true,b);
  241. }
  242. }
  243. return mp(false,b);
  244. }
  245. int main()
  246. {
  247. FOR(i,2,10)
  248. mm['0'+i]=i;
  249. mm['X']=10;
  250. mm['J']=11;
  251. mm['Q']=12;
  252. mm['K']=13;
  253. mm['A']=14;
  254. //sort them all!!!
  255. /*vector<pnt > b;
  256.   FOR(i,0,7)
  257.   string s;
  258.   cin>>s;
  259.   //cout<<s<<endl;
  260.   int v2=0;
  261.   if (s[1]=='d')
  262. v2=1;
  263.   if (s[1]=='h')
  264. v2=2;
  265.   if (s[1]=='s')
  266. v2=3;
  267.   c.push_back(mp(mm[s[0]],v2));
  268.   }
  269.   {
  270.   string s;
  271.   cin>>s;
  272.   //cout<<s<<endl;
  273.   int v2=0;
  274.   if (s[1]=='d')
  275.   v2=1;
  276.   if (s[1]=='h')
  277.   v2=2;
  278.   if (s[1]=='s')
  279.   v2=3;
  280.   b.push_back(mp(mm[s[0]],v2));
  281.   //cout<<v2<<endl;
  282.   }
  283.   sort(b.rbegin(),b.rend());
  284.   pair<bool,vector<int> > a=isRoyalFlush(b);
  285.   cout<<a.first<<endl;
  286.   FOR(i,0,a.second.size())
  287.   cout<<a.second[i]<<" ";
  288.   cout<<endl;*/
  289. int n;
  290. while (scanf("%d",&n)!=EOF)
  291. {
  292. players.clear();
  293. players.resize(n);
  294. vector<pnt > c;
  295. FOR(it,0,5)
  296. {
  297. string s;
  298. cin>>s;
  299. //cout<<s<<endl;
  300. int v2=0;
  301. if (s[1]=='d')
  302. v2=1;
  303. if (s[1]=='h')
  304. v2=2;
  305. if (s[1]=='s')
  306. v2=3;
  307. c.push_back(mp(mm[s[0]],v2));
  308. }
  309. FOR(i,0,n)
  310. {
  311. players[i]=c;
  312. //cout<<v2<<endl;
  313. FOR(it,0,2)
  314. {
  315. string s;
  316. cin>>s;
  317. //cout<<s<<endl;
  318. int v2=0;
  319. if (s[1]=='d')
  320. v2=1;
  321. if (s[1]=='h')
  322. v2=2;
  323. if (s[1]=='s')
  324. v2=3;
  325. players[i].push_back(mp(mm[s[0]],v2));
  326. }
  327. sort(players[i].rbegin(),players[i].rend());
  328. }
  329. FOR(i,0,n)
  330. {
  331. pair<bool, vector<int> > tmp;
  332. tmp=isRoyalFlush(players[i]);
  333. if (tmp.first)
  334. {
  335. have[i].first=9;
  336. have[i].second=tmp.second;
  337. continue;
  338. }
  339. tmp=isPoker(players[i]);
  340. if (tmp.first)
  341. {
  342. have[i].first=8;
  343. have[i].second=tmp.second;
  344. continue;
  345. }
  346. tmp=isFullHouse(players[i]);
  347. if (tmp.first)
  348. {
  349. have[i].first=7;
  350. have[i].second=tmp.second;
  351. continue;
  352. }
  353. tmp=isFlush(players[i]);
  354. if (tmp.first)
  355. {
  356. have[i].first=6;
  357. have[i].second=tmp.second;
  358. continue;
  359. }
  360. tmp=isStraight(players[i]);
  361. if (tmp.first)
  362. {
  363. have[i].first=5;
  364. have[i].second=tmp.second;
  365. continue;
  366. }
  367. tmp=isThree(players[i]);
  368. if (tmp.first)
  369. {
  370. have[i].first=4;
  371. have[i].second=tmp.second;
  372. continue;
  373. }
  374. tmp=isTwoPairs(players[i]);
  375. if (tmp.first)
  376. {
  377. have[i].first=3;
  378. have[i].second=tmp.second;
  379. continue;
  380. }
  381. tmp=isPair(players[i]);
  382. if (tmp.first)
  383. {
  384. have[i].first=2;
  385. have[i].second=tmp.second;
  386. continue;
  387. }
  388. tmp=isOneCard(players[i]);
  389. if (tmp.first)
  390. {
  391. have[i].first=1;
  392. have[i].second=tmp.second;
  393. continue;
  394. }
  395. }
  396. vector<int> res;
  397. FOR(i,0,n)
  398. {
  399. bool f=true;
  400. FOR(j,0,n)
  401. if (i!=j)
  402. if (have[i]<have[j])
  403. f=false;
  404. if (f)
  405. res.push_back(i+1);
  406. }
  407. FOR(i,0,res.size())
  408. {
  409. if (i)
  410. printf(" ");
  411. printf("%d",res[i]);
  412. }
  413. printf("\n");
  414. }
  415.  
  416. return 0;
  417. }

Diff to submission s1144

temp.cpp

--- c4.s1144.cteam050.rhino.cpp.0.temp.cpp
+++ c4.s1194.cteam050.rhino.cpp.0.temp.cpp
@@ -92,44 +92,44 @@
 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()-3)
-  {
-    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);
+  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);
+              }
+            }
+          }
+          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].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);
 }
 pair<bool, vector<int> > isFlush(vector<pnt > a)
@@ -229,4 +229,6 @@
           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))
+            {
           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))
               {
@@ -238,4 +240,5 @@
                 return mp(true,b);
               }
+            }
           return mp(false,b);
 }