Source code for submission s1108

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

Diff to submission s1069

ololo.cpp

--- 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;