fork download
  1. /*
  2. written by- Piyush Golani
  3. language- c++
  4. country- India
  5. College- N.I.T Jamshedpur
  6. */
  7. #include <cmath>
  8. #include <ctime>
  9. #include <iostream>
  10. #include <string>
  11. #include <vector>
  12. #include<cstdio>
  13. #include<sstream>
  14. #include<algorithm>
  15. #include<cstdlib>
  16. #include<cstring>
  17. #include<map>
  18. #include<queue>
  19. #include<cctype>
  20. using namespace std;
  21. #define pb push_back
  22. #define all(s) s.begin(),s.end()
  23. #define f(i,a,b) for(int i=a;i<b;i++)
  24. #define F(i,a,b) for(int i=a;i>=b;i--)
  25. #define PI 3.1415926535897932384626433832795
  26. #define INF 2000000000
  27. #define BIG_INF 7000000000000000000LL
  28. #define mp make_pair
  29. #define eps 1e-9
  30. #define LL long long
  31. #define si(n) scanf("%d",&n)
  32. #define sll(n) scanf("%lld",&n)
  33. #define mod 1000000007
  34. #define mm 10000000
  35.  
  36. class PenguinPals {
  37. public:
  38. int findMaximumMatching( string colors ) {
  39. bool f=false;
  40. int matches=0;
  41. while(!f && colors.size()>=2)
  42. {
  43. f=true;
  44. if(colors[0]==colors[colors.size()-1])
  45. {
  46. f=false;
  47. matches++;
  48. colors=colors.substr(1,colors.size()-2);
  49. }
  50. int i=0;
  51. while(i+1<colors.size())
  52. {
  53. if(colors[i]==colors[i+1])
  54. {
  55. f=false;
  56. matches++;
  57. colors=colors.substr(0,i)+colors.substr(i+2);
  58. }
  59. i++;
  60. }
  61. }
  62. if(colors.size()>1)
  63. {
  64. matches+=(colors.size()-2)/2;
  65. }
  66. return matches;
  67. }
  68. };
  69.  
  70. // BEGIN CUT HERE
  71. namespace moj_harness {
  72. int run_test_case(int);
  73. void run_test(int casenum = -1, bool quiet = false) {
  74. if (casenum != -1) {
  75. if (run_test_case(casenum) == -1 && !quiet) {
  76. cerr << "Illegal input! Test case " << casenum << " does not exist." << endl;
  77. }
  78. return;
  79. }
  80.  
  81. int correct = 0, total = 0;
  82. for (int i=0;; ++i) {
  83. int x = run_test_case(i);
  84. if (x == -1) {
  85. if (i >= 100) break;
  86. continue;
  87. }
  88. correct += x;
  89. ++total;
  90. }
  91.  
  92. if (total == 0) {
  93. cerr << "No test cases run." << endl;
  94. } else if (correct < total) {
  95. cerr << "Some cases FAILED (passed " << correct << " of " << total << ")." << endl;
  96. } else {
  97. cerr << "All " << total << " tests passed!" << endl;
  98. }
  99. }
  100.  
  101. int verify_case(int casenum, const int &expected, const int &received, clock_t elapsed) {
  102. cerr << "Example " << casenum << "... ";
  103.  
  104. string verdict;
  105. vector<string> info;
  106. char buf[100];
  107.  
  108. if (elapsed > CLOCKS_PER_SEC / 200) {
  109. sprintf(buf, "time %.2fs", elapsed * (1.0/CLOCKS_PER_SEC));
  110. info.push_back(buf);
  111. }
  112.  
  113. if (expected == received) {
  114. verdict = "PASSED";
  115. } else {
  116. verdict = "FAILED";
  117. }
  118.  
  119. cerr << verdict;
  120. if (!info.empty()) {
  121. cerr << " (";
  122. for (int i=0; i<(int)info.size(); ++i) {
  123. if (i > 0) cerr << ", ";
  124. cerr << info[i];
  125. }
  126. cerr << ")";
  127. }
  128. cerr << endl;
  129.  
  130. if (verdict == "FAILED") {
  131. cerr << " Expected: " << expected << endl;
  132. cerr << " Received: " << received << endl;
  133. }
  134.  
  135. return verdict == "PASSED";
  136. }
  137.  
  138. int run_test_case(int casenum__) {
  139. switch (casenum__) {
  140. case 0: {
  141. string colors = "RRBRBRBB";
  142. int expected__ = 3;
  143.  
  144. clock_t start__ = clock();
  145. int received__ = PenguinPals().findMaximumMatching(colors);
  146. return verify_case(casenum__, expected__, received__, clock()-start__);
  147. }
  148. case 1: {
  149. string colors = "RRRR";
  150. int expected__ = 2;
  151.  
  152. clock_t start__ = clock();
  153. int received__ = PenguinPals().findMaximumMatching(colors);
  154. return verify_case(casenum__, expected__, received__, clock()-start__);
  155. }
  156. case 2: {
  157. string colors = "BBBBB";
  158. int expected__ = 2;
  159.  
  160. clock_t start__ = clock();
  161. int received__ = PenguinPals().findMaximumMatching(colors);
  162. return verify_case(casenum__, expected__, received__, clock()-start__);
  163. }
  164. case 3: {
  165. string colors = "RBRBRBRBR";
  166. int expected__ = 4;
  167.  
  168. clock_t start__ = clock();
  169. int received__ = PenguinPals().findMaximumMatching(colors);
  170. return verify_case(casenum__, expected__, received__, clock()-start__);
  171. }
  172. case 4: {
  173. string colors = "RRRBRBRBRBRB";
  174. int expected__ = 5;
  175.  
  176. clock_t start__ = clock();
  177. int received__ = PenguinPals().findMaximumMatching(colors);
  178. return verify_case(casenum__, expected__, received__, clock()-start__);
  179. }
  180. case 5: {
  181. string colors = "R";
  182. int expected__ = 0;
  183.  
  184. clock_t start__ = clock();
  185. int received__ = PenguinPals().findMaximumMatching(colors);
  186. return verify_case(casenum__, expected__, received__, clock()-start__);
  187. }
  188. case 6: {
  189. string colors = "RBRRBBRB";
  190. int expected__ = 3;
  191.  
  192. clock_t start__ = clock();
  193. int received__ = PenguinPals().findMaximumMatching(colors);
  194. return verify_case(casenum__, expected__, received__, clock()-start__);
  195. }
  196. case 7: {
  197. string colors = "RBRBBRBRB";
  198. int expected__ = 4;
  199.  
  200. clock_t start__ = clock();
  201. int received__ = PenguinPals().findMaximumMatching(colors);
  202. return verify_case(casenum__, expected__, received__, clock()-start__);
  203. }
  204.  
  205. // custom cases
  206.  
  207. /* case 8: {
  208. string colors = ;
  209. int expected__ = ;
  210.  
  211. clock_t start__ = clock();
  212. int received__ = PenguinPals().findMaximumMatching(colors);
  213. return verify_case(casenum__, expected__, received__, clock()-start__);
  214. }*/
  215. /* case 9: {
  216. string colors = ;
  217. int expected__ = ;
  218.  
  219. clock_t start__ = clock();
  220. int received__ = PenguinPals().findMaximumMatching(colors);
  221. return verify_case(casenum__, expected__, received__, clock()-start__);
  222. }*/
  223. /* case 10: {
  224. string colors = ;
  225. int expected__ = ;
  226.  
  227. clock_t start__ = clock();
  228. int received__ = PenguinPals().findMaximumMatching(colors);
  229. return verify_case(casenum__, expected__, received__, clock()-start__);
  230. }*/
  231. default:
  232. return -1;
  233. }
  234. }
  235. }
  236.  
  237.  
  238. int main(int argc, char *argv[]) {
  239. if (argc == 1) {
  240. moj_harness::run_test();
  241. } else {
  242. for (int i=1; i<argc; ++i)
  243. moj_harness::run_test(atoi(argv[i]));
  244. }
  245. }
  246. // END CUT HERE
  247.  
Success #stdin #stdout 0.02s 2860KB
stdin
Standard input is empty
stdout
Standard output is empty