Guest User

Set URIONLINE JUDGE

a guest
Sep 7th, 2019
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <string> //getline
  3. #include <cstring> //memset
  4. #include <fstream>
  5.  
  6. using std::cin;
  7. using std::cout;
  8. using std::string;
  9.  
  10.  
  11. enum figure_
  12. {
  13.     square,
  14.     circle,
  15.     triangle
  16. };
  17.  
  18. enum quantity_
  19. {
  20.     one =1,
  21.     two =2,
  22.     three =3
  23. };
  24.  
  25. constexpr int figureMax = triangle+1;
  26. constexpr int quantityMax = three+1;
  27.  
  28. long int CardDeck[figureMax][quantityMax];
  29.  
  30. int finds = 0;
  31.  
  32.  
  33. struct card
  34. {
  35.     short qnty;
  36.     figure_ figure;
  37.     card(short n, figure_ f) : qnty(n), figure(f) {}
  38. };
  39.  
  40. card GetCard(std::string cardRead);
  41.  
  42. inline void DecreaseFromDeck(figure_ figure, quantity_ qnty)
  43. {
  44.     if(CardDeck[figure][qnty] == 0)
  45.     {
  46.         std::cout << "WTFFFFFFFFFFFFFFFFFF\n\n\n\n\n\n";
  47.     }
  48.     CardDeck[figure][qnty]--;
  49. }
  50.  
  51. void AddCardToDeck(figure_ figure, quantity_ qnty)
  52. {
  53.     CardDeck[figure][qnty]++;
  54. }
  55.  
  56. bool isPossibleMatch(figure_ figure, quantity_ qnty);
  57.  
  58. void FinishHim()
  59. {
  60.     for(int fig=0; fig<figureMax; fig++)
  61.     {
  62.         for(int numof=static_cast<int>(one); numof<quantityMax; numof++)
  63.         {
  64.             if(CardDeck[fig][numof] == 0) //do not lookup 0 card OH-hohoho
  65.                 continue;
  66.  
  67.             while(isPossibleMatch(static_cast<figure_>(fig), static_cast<quantity_>(numof)))
  68.             {
  69.                 DecreaseFromDeck(static_cast<figure_>(fig), static_cast<quantity_>(numof));
  70.                 finds++;
  71.  
  72.                 if(CardDeck[fig][numof] == 0)
  73.                     break;
  74.             }
  75.         }
  76.     }
  77. }
  78.  
  79. void WipeOUT()
  80. {
  81.     finds = 0;
  82.     memset(CardDeck, 0, sizeof(CardDeck));
  83. }
  84.  
  85. int main()
  86. {
  87.     //
  88.  
  89. /*
  90.     std::ifstream file("C:\\Users\\10274637626\\Documents\\ff.txt");
  91.     std::string str;
  92.     while(std::getline(file, str))
  93.     {
  94.         if(str.size() < 2)
  95.         {
  96.             FinishHim();
  97.             std::cout << finds << std::endl;
  98.             WipeOUT();
  99.  
  100.         }else{
  101.             card c = GetCard(str);
  102.           AddCardToDeck( c.figure, static_cast<quantity_>(c.qnty) );
  103.         }
  104.     }
  105. */
  106.  
  107.  
  108.     int i{0};
  109.     int numofcards{0};
  110.     string cardRead;
  111.  
  112.     cin >> numofcards;
  113.  
  114.  
  115.     while(numofcards != 0)
  116.     {
  117.         std::cin.ignore();
  118.  
  119.         for(i=0; i<numofcards; i++)
  120.         {
  121.             std::getline(std::cin, cardRead);
  122.             card c = GetCard(cardRead);
  123.             AddCardToDeck( c.figure, static_cast<quantity_>(c.qnty) );
  124.         }
  125.  
  126.         FinishHim();
  127.  
  128.         cout << finds << std::endl;
  129.  
  130.         WipeOUT();
  131.  
  132.         cin >> numofcards;
  133.     }
  134.  
  135.     return 0;
  136. }
  137.  
  138. card GetCard(std::string cardRead)
  139. {
  140.     if(cardRead.compare("um quadrado") == 0) return card(1, square);
  141.     else if(cardRead.compare("dois quadrados") == 0) return card(2, square);
  142.     else if(cardRead.compare("tres quadrados") == 0) return card(3, square);
  143.     else if(cardRead.compare("um triangulo") == 0) return card(1, triangle);
  144.     else if(cardRead.compare("dois triangulos") == 0) return card(2, triangle);
  145.     else if(cardRead.compare("tres triangulos") == 0) return card(3, triangle);
  146.     else if(cardRead.compare("um circulo") == 0) return card(1, circle);
  147.     else if(cardRead.compare("dois circulos") == 0) return card(2, circle);
  148.     else if(cardRead.compare("tres circulos") == 0) return card(3, circle);
  149.  
  150.     int *p = 0;
  151.     *p++;
  152.  
  153.  
  154.     return card(0, (figure_)0);
  155. }
  156.  
  157. bool isPossibleMatch(figure_ figure, quantity_ qnty)
  158. {
  159.     if(figure == square)
  160.     {
  161.         if(qnty == one)
  162.         {
  163.            
  164.             if(CardDeck[circle][two] && CardDeck[triangle][three])
  165.             {
  166.                 DecreaseFromDeck(circle, two);
  167.                 DecreaseFromDeck(triangle, three);
  168.                 return true;
  169.             }
  170.             if(CardDeck[triangle][two] && CardDeck[circle][three])
  171.             {
  172.                 DecreaseFromDeck(triangle, two);
  173.                 DecreaseFromDeck(circle, three);
  174.                 return true;
  175.             }
  176.             if(CardDeck[square][two] && CardDeck[square][three])
  177.             {
  178.                 DecreaseFromDeck(square, two);
  179.                 DecreaseFromDeck(square, three);
  180.                 return true;
  181.             }
  182.         } else
  183.         if(qnty == two)
  184.         {
  185.            
  186.             if(CardDeck[circle][one] && CardDeck[triangle][three])
  187.             {
  188.                 DecreaseFromDeck(circle, one);
  189.                 DecreaseFromDeck(triangle, three);
  190.                 return true;
  191.             }
  192.             if(CardDeck[triangle][one] && CardDeck[circle][three])
  193.             {
  194.                 DecreaseFromDeck(triangle, one);
  195.                 DecreaseFromDeck(circle, three);
  196.                 return true;
  197.             }
  198.             if(CardDeck[square][one] && CardDeck[square][three])
  199.             {
  200.                 DecreaseFromDeck(square, one);
  201.                 DecreaseFromDeck(square, three);
  202.                 return true;
  203.             }
  204.         }else
  205.         if(qnty == three)
  206.         {
  207.            
  208.             if(CardDeck[circle][one] && CardDeck[triangle][two])
  209.             {
  210.                 DecreaseFromDeck(circle, one);
  211.                 DecreaseFromDeck(triangle, two);
  212.                 return true;
  213.             }
  214.             if(CardDeck[triangle][one] && CardDeck[circle][two])
  215.             {
  216.                 DecreaseFromDeck(triangle, one);
  217.                 DecreaseFromDeck(circle, two);
  218.                 return true;
  219.             }
  220.             if(CardDeck[square][one] && CardDeck[square][two])
  221.             {
  222.                 DecreaseFromDeck(square, one);
  223.                 DecreaseFromDeck(square, two);
  224.                 return true;
  225.             }
  226.         }
  227.     }else
  228.     if(figure == circle)
  229.     {
  230.         if(qnty == one)
  231.         {
  232.            
  233.             if(CardDeck[square][two] && CardDeck[triangle][three])
  234.             {
  235.                 DecreaseFromDeck(square, two);
  236.                 DecreaseFromDeck(triangle, three);
  237.                 return true;
  238.             }
  239.             if(CardDeck[triangle][two] && CardDeck[square][three])
  240.             {
  241.                 DecreaseFromDeck(triangle, two);
  242.                 DecreaseFromDeck(square, three);
  243.                 return true;
  244.             }
  245.             if(CardDeck[circle][two] && CardDeck[circle][three])
  246.             {
  247.                 DecreaseFromDeck(circle, two);
  248.                 DecreaseFromDeck(circle, three);
  249.                 return true;
  250.             }
  251.         } else
  252.         if(qnty == two)
  253.         {
  254.            
  255.             if(CardDeck[square][one] && CardDeck[triangle][three])
  256.             {
  257.                 DecreaseFromDeck(square, one);
  258.                 DecreaseFromDeck(triangle, three);
  259.                 return true;
  260.             }
  261.             if(CardDeck[triangle][one] && CardDeck[square][three])
  262.             {
  263.                 DecreaseFromDeck(triangle, one);
  264.                 DecreaseFromDeck(square, three);
  265.                 return true;
  266.             }
  267.             if(CardDeck[circle][one] && CardDeck[circle][three])
  268.             {
  269.                 DecreaseFromDeck(circle, one);
  270.                 DecreaseFromDeck(circle, three);
  271.                 return true;
  272.             }
  273.         }else
  274.         if(qnty == three)
  275.         {
  276.            
  277.             if(CardDeck[square][one] && CardDeck[triangle][two])
  278.             {
  279.                 DecreaseFromDeck(square, one);
  280.                 DecreaseFromDeck(triangle, two);
  281.                 return true;
  282.             }
  283.             if(CardDeck[triangle][one] && CardDeck[square][two])
  284.             {
  285.                 DecreaseFromDeck(triangle, one);
  286.                 DecreaseFromDeck(square, two);
  287.                 return true;
  288.             }
  289.             if(CardDeck[circle][one] && CardDeck[circle][two])
  290.             {
  291.                 DecreaseFromDeck(circle, one);
  292.                 DecreaseFromDeck(circle, two);
  293.                 return true;
  294.             }
  295.         }
  296.     }else
  297.     if(figure == triangle)
  298.     {
  299.         if(qnty == one)
  300.         {
  301.            
  302.             if(CardDeck[square][two] && CardDeck[circle][three])
  303.             {
  304.                 DecreaseFromDeck(square, two);
  305.                 DecreaseFromDeck(circle, three);
  306.                 return true;
  307.             }
  308.             if(CardDeck[circle][two] && CardDeck[square][three])
  309.             {
  310.                 DecreaseFromDeck(circle, two);
  311.                 DecreaseFromDeck(square, three);
  312.                 return true;
  313.             }
  314.             if(CardDeck[triangle][two] && CardDeck[triangle][three])
  315.             {
  316.                 DecreaseFromDeck(triangle, two);
  317.                 DecreaseFromDeck(triangle, three);
  318.                 return true;
  319.             }
  320.         } else
  321.         if(qnty == two)
  322.         {
  323.            
  324.             if(CardDeck[square][one] && CardDeck[circle][three])
  325.             {
  326.                 DecreaseFromDeck(square, one);
  327.                 DecreaseFromDeck(circle, three);
  328.                 return true;
  329.             }
  330.             if(CardDeck[circle][one] && CardDeck[square][three])
  331.             {
  332.                 DecreaseFromDeck(circle, one);
  333.                 DecreaseFromDeck(square, three);
  334.                 return true;
  335.             }
  336.             if(CardDeck[triangle][one] && CardDeck[triangle][three])
  337.             {
  338.                 DecreaseFromDeck(triangle, one);
  339.                 DecreaseFromDeck(triangle, three);
  340.                 return true;
  341.             }
  342.         }else
  343.         if(qnty == three)
  344.         {
  345.            
  346.             if(CardDeck[square][one] && CardDeck[circle][two])
  347.             {
  348.                 DecreaseFromDeck(square, one);
  349.                 DecreaseFromDeck(circle, two);
  350.                 return true;
  351.             }
  352.             if(CardDeck[circle][one] && CardDeck[square][two])
  353.             {
  354.                 DecreaseFromDeck(circle, one);
  355.                 DecreaseFromDeck(square, two);
  356.                 return true;
  357.             }
  358.             if(CardDeck[triangle][one] && CardDeck[triangle][two])
  359.             {
  360.                 DecreaseFromDeck(triangle, one);
  361.                 DecreaseFromDeck(triangle, two);
  362.                 return true;
  363.             }
  364.         }
  365.     }
  366.  
  367.  
  368.     if(CardDeck[figure][qnty] > 2)
  369.     {
  370.         DecreaseFromDeck(figure, qnty);
  371.         DecreaseFromDeck(figure, qnty);
  372.         return true;
  373.     }
  374.  
  375.     return false;
  376. }
Advertisement
Add Comment
Please, Sign In to add comment