Advertisement
dipBRUR

23

Nov 19th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. //Algo: Create a Binary Tree using inOrder and postOrder
  2.  
  3. void PreOrder(node *tRoot) {
  4. if (tRoot == NULL) return;
  5. cout << tRoot->info << " ";
  6. PreOrder(tRoot->left);
  7. PreOrder(tRoot->right);
  8. }
  9. // Call :
  10. pIndex = n-1;
  11. node *root = makeTree(inOrder, postOrder, 0, n-1);
  12.  
  13. // Algo: Spargue Grundy Number - 1D
  14.  
  15. int grundy[mx];
  16. int rev[] = {1, 4, 27, 256, 3125, 46656};
  17. int Cal(int x) {
  18. if (x == 0)
  19. return 0;
  20. int &ret = grundy[x];
  21. if (ret != -1)
  22. return ret;
  23. set <int> s;
  24. for (int f=0; f<6; f++) {
  25. if (x-rev[f] >= 0)
  26. s.insert(Cal(x - rev[f]));
  27. }
  28. int cnt = 0;
  29. while (s.find(cnt) != s.end())
  30. cnt++;
  31. return ret = cnt;
  32. }
  33.  
  34. // Algo: Spargue Grundy Number - 2D
  35. int dr[] = {-1, -2, -2, +1};
  36. int dc[] = {-2, -1, +1, -2};
  37. int validMove(int r, int c) {
  38. return r>=1 && r<=8 && c>=1 && c<=8;
  39. }
  40. int grundyNumber[mx+5][mx+5];
  41. int Call(int r, int c) {
  42. if (!validMove(r, c)) // যদি কোন ঘরে যাওয়া না যায়
  43. return 0; // তাহলে লুজিং পসিশন, মানে ০
  44. int &ret = grundyNumber[r][c];
  45. if (ret != -1)
  46. return ret;
  47. set <int> s;
  48. for (int f=0; f<4; f++) {
  49. int x = r + dr[f]; // বর্তমান ঘর থেকে যেসব ঘরে যাওয়া যায়
  50. int y = c + dc[f];
  51. if (validMove(x, y)) // যদি অন্য কোন ঘরে যাওয়া যায়
  52. s.insert(Call(x, y));
  53. }
  54. int cnt = 0;
  55. while (s.find(cnt) != s.end())
  56. cnt++; // মিনিমাম নাম্বার যেটি সেটে নাই
  57. return ret = cnt;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement