Advertisement
Atsushi4

devquiz2011_solo_game

Sep 13th, 2011
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3. #include <set>
  4. #include <map>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. typedef vector<int> DataList;
  10. static int test(const DataList &dat, int depth = 0);
  11.  
  12. int main()
  13. {
  14.     ifstream is("data.txt");
  15.     int t;
  16.     is >> t;
  17.  
  18.     ofstream os("solo_game_result.txt");
  19.     for (int i = 0; i < t; ++i)
  20.     {
  21.         int n;
  22.         is >> n;
  23.         DataList dat(n);
  24.         for (int j = 0; j < n; ++j)
  25.         {
  26.             is >> dat[j];
  27.         }
  28.         os << test(dat) << endl;
  29.     }
  30.  
  31.     return 0;
  32. }
  33.  
  34. void divide(int &i)
  35. {
  36.     i /= 2;
  37. }
  38.  
  39. void get(DataList &dat)
  40. {
  41.     for (DataList::iterator i = dat.begin(); i != dat.end(); ++i)
  42.     {
  43.         while ((*i % 5 == 0) || (*i % 10 == 0))
  44.         {
  45.             i = dat.erase(i);
  46.             if (i == dat.end())
  47.                 return;
  48.         }
  49.     }
  50. }
  51.  
  52. int test(const DataList &dat, int depth)
  53. {
  54.     DataList dat1 = dat, dat2 = dat;
  55.     for_each(dat1.begin(), dat1.end(), divide);
  56.     get(dat2);
  57.     ++depth;
  58.     if (dat2.empty())
  59.     {
  60.         return depth;
  61.     }
  62.     else if (dat2.size() == dat.size())
  63.     {
  64.         return test(dat1, depth);
  65.     }
  66.     else
  67.     {
  68.     i1 = test(dat1, depth), i2 = test(dat2, depth);
  69.         return min(i1, i2);
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement