v 0. Pasted by slipstak2 as cpp at 2010-11-23 22:57:34 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 6.
  2. // 6C. Игра "Даты" [dategame]
  3. // ibelyaev: 23Nov2010
  4.  
  5. #include <iostream>
  6. #include <cstdio>
  7. #include <vector>
  8. #include <string.h>
  9.  
  10. using namespace std;
  11.  
  12. bool isWin[32][13];
  13. int day,mon;
  14. void input()
  15. {
  16.     cin>>day>>mon;
  17. }
  18. inline bool equal(int* a, int *b)
  19. {
  20.     return a[0] == b[0] && a[1] == b[1];
  21. }
  22. int days[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
  23. bool isCorrectDate(int* d)
  24. {
  25.     return d[1] < 13 && days[d[1]] >= d[0];
  26. }
  27. void DecDay(int* cur)
  28. {
  29.     cur[0]--;
  30.     if (cur[0] == 0)
  31.     {
  32.         cur[1]--;
  33.         cur[0] = days[cur[1]];
  34.     }
  35. }
  36. void solve()
  37. {
  38.     isWin[31][12] = true;
  39.  
  40.     int cur[2]   = {31,12};
  41.     int begin[2] = {day,mon};
  42.     do
  43.     {
  44.         DecDay(cur);
  45.         int next[2];
  46.         bool isCurWin = false;
  47.         for (int i=0;i<2;i++)
  48.         {
  49.             memcpy(next,cur,2*sizeof(int));
  50.             for (int j=1; j<=2; j++)
  51.             {
  52.                 next[i] = cur[i] + j;
  53.                 if (isCorrectDate(next))
  54.                     if (!isWin[next[0]][next[1]])
  55.                         isCurWin = true;
  56.             }
  57.         }
  58.         isWin[cur[0]][cur[1]] = isCurWin;
  59.  
  60.     } while (!equal(cur,begin));
  61. }
  62. void output()
  63. {
  64.     if (isWin[day][mon])
  65.         cout<<1;
  66.     else
  67.         cout<<2;
  68. }
  69. int main()
  70. {
  71.     freopen("input.txt","r",stdin);
  72.     freopen("output.txt","w",stdout);
  73.  
  74.     input();
  75.     solve();
  76.     output();
  77.     return 0;
  78. }


Editing is locked.