Source code for submission s1144

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(i,0,a.size()-4)
  96. {
  97. bool f=true;
  98. FOR(j,0,4)
  99. if (a[i+j].first!=a[i+j+1].first+1)
  100. {
  101. f=false;
  102. break;
  103. }
  104. if (f)
  105. {
  106. b.push_back(a[i].first);
  107. return mp(true,b);
  108. }
  109. }
  110. bool isace=false;
  111. FOR(i,0,a.size())
  112. if (a[i].first==14)
  113. isace=true;
  114. if (!isace)
  115. return mp(false,b);
  116. FOR(i,0,a.size()-3)
  117. {
  118. if (a[i].first!=5)
  119. continue;
  120. bool f=true;
  121. FOR(j,0,3)
  122. if (a[i+j].first!=a[i+j+1].first+1)
  123. {
  124. f=false;
  125. break;
  126. }
  127. if (f)
  128. {
  129. b.push_back(a[i].first);
  130. return mp(true,b);
  131. }
  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].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))
  232. {
  233. b.push_back(a[i2].first);
  234. b.push_back(a[i3].first);
  235. b.push_back(a[i4].first);
  236. b.push_back(a[i5].first);
  237. b.push_back(a[i1].first);
  238. return mp(true,b);
  239. }
  240. return mp(false,b);
  241. }
  242. int main()
  243. {
  244. FOR(i,2,10)
  245. mm['0'+i]=i;
  246. mm['X']=10;
  247. mm['J']=11;
  248. mm['Q']=12;
  249. mm['K']=13;
  250. mm['A']=14;
  251. //sort them all!!!
  252. /*vector<pnt > b;
  253.   FOR(i,0,7)
  254.   string s;
  255.   cin>>s;
  256.   //cout<<s<<endl;
  257.   int v2=0;
  258.   if (s[1]=='d')
  259. v2=1;
  260.   if (s[1]=='h')
  261. v2=2;
  262.   if (s[1]=='s')
  263. v2=3;
  264.   c.push_back(mp(mm[s[0]],v2));
  265.   }
  266.   {
  267.   string s;
  268.   cin>>s;
  269.   //cout<<s<<endl;
  270.   int v2=0;
  271.   if (s[1]=='d')
  272.   v2=1;
  273.   if (s[1]=='h')
  274.   v2=2;
  275.   if (s[1]=='s')
  276.   v2=3;
  277.   b.push_back(mp(mm[s[0]],v2));
  278.   //cout<<v2<<endl;
  279.   }
  280.   sort(b.rbegin(),b.rend());
  281.   pair<bool,vector<int> > a=isRoyalFlush(b);
  282.   cout<<a.first<<endl;
  283.   FOR(i,0,a.second.size())
  284.   cout<<a.second[i]<<" ";
  285.   cout<<endl;*/
  286. int n;
  287. while (scanf("%d",&n)!=EOF)
  288. {
  289. players.clear();
  290. players.resize(n);
  291. vector<pnt > c;
  292. FOR(it,0,5)
  293. {
  294. string s;
  295. cin>>s;
  296. //cout<<s<<endl;
  297. int v2=0;
  298. if (s[1]=='d')
  299. v2=1;
  300. if (s[1]=='h')
  301. v2=2;
  302. if (s[1]=='s')
  303. v2=3;
  304. c.push_back(mp(mm[s[0]],v2));
  305. }
  306. FOR(i,0,n)
  307. {
  308. players[i]=c;
  309. //cout<<v2<<endl;
  310. FOR(it,0,2)
  311. {
  312. string s;
  313. cin>>s;
  314. //cout<<s<<endl;
  315. int v2=0;
  316. if (s[1]=='d')
  317. v2=1;
  318. if (s[1]=='h')
  319. v2=2;
  320. if (s[1]=='s')
  321. v2=3;
  322. players[i].push_back(mp(mm[s[0]],v2));
  323. }
  324. sort(players[i].rbegin(),players[i].rend());
  325. }
  326. FOR(i,0,n)
  327. {
  328. pair<bool, vector<int> > tmp;
  329. tmp=isRoyalFlush(players[i]);
  330. if (tmp.first)
  331. {
  332. have[i].first=9;
  333. have[i].second=tmp.second;
  334. continue;
  335. }
  336. tmp=isPoker(players[i]);
  337. if (tmp.first)
  338. {
  339. have[i].first=8;
  340. have[i].second=tmp.second;
  341. continue;
  342. }
  343. tmp=isFullHouse(players[i]);
  344. if (tmp.first)
  345. {
  346. have[i].first=7;
  347. have[i].second=tmp.second;
  348. continue;
  349. }
  350. tmp=isFlush(players[i]);
  351. if (tmp.first)
  352. {
  353. have[i].first=6;
  354. have[i].second=tmp.second;
  355. continue;
  356. }
  357. tmp=isStraight(players[i]);
  358. if (tmp.first)
  359. {
  360. have[i].first=5;
  361. have[i].second=tmp.second;
  362. continue;
  363. }
  364. tmp=isThree(players[i]);
  365. if (tmp.first)
  366. {
  367. have[i].first=4;
  368. have[i].second=tmp.second;
  369. continue;
  370. }
  371. tmp=isTwoPairs(players[i]);
  372. if (tmp.first)
  373. {
  374. have[i].first=3;
  375. have[i].second=tmp.second;
  376. continue;
  377. }
  378. tmp=isPair(players[i]);
  379. if (tmp.first)
  380. {
  381. have[i].first=2;
  382. have[i].second=tmp.second;
  383. continue;
  384. }
  385. tmp=isOneCard(players[i]);
  386. if (tmp.first)
  387. {
  388. have[i].first=1;
  389. have[i].second=tmp.second;
  390. continue;
  391. }
  392. }
  393. vector<int> res;
  394. FOR(i,0,n)
  395. {
  396. bool f=true;
  397. FOR(j,0,n)
  398. if (i!=j)
  399. if (have[i]<have[j])
  400. f=false;
  401. if (f)
  402. res.push_back(i+1);
  403. }
  404. FOR(i,0,res.size())
  405. {
  406. if (i)
  407. printf(" ");
  408. printf("%d",res[i]);
  409. }
  410. printf("\n");
  411. }
  412.  
  413. return 0;
  414. }

Diff to submission s1108

temp.cpp

--- c4.s1108.cteam050.rhino.cpp.0.temp.cpp
+++ c4.s1144.cteam050.rhino.cpp.0.temp.cpp
@@ -114,5 +114,5 @@
   if (!isace)
     return mp(false,b);
-  FOR(i,0,a.size()-4)
+  FOR(i,0,a.size()-3)
   {
     if (a[i].first!=5)
@@ -222,5 +222,12 @@
               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))
+            }
+          }
+          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);
@@ -231,6 +238,4 @@
                 return mp(true,b);
               }
-            }
-          }
           return mp(false,b);
 }