记录编号 47743 评测结果 AAAAAAAA
题目名称 魔板 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.068 s
提交时间 2012-11-03 10:55:33 内存使用 16.76 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. struct quetype
  8. {
  9. int deep,dad,rec,data[8];
  10. };
  11.  
  12. int sq8[8]={1};
  13. bool used[16777216];
  14. vector<quetype> que;
  15.  
  16. void printway(int poi)
  17. {
  18. if (poi)
  19. {
  20. printway(que[poi].dad);
  21. cout<<char(que[poi].rec+'A'-1);
  22. }
  23. }
  24.  
  25. int main(void)
  26. {
  27. freopen("msquare.in","r",stdin);
  28. freopen("msquare.out","w",stdout);
  29. unsigned int tail=0;
  30. int i,tar=0,temp;
  31. quetype a,b;
  32. for (i=1;i<8;i++)
  33. sq8[i]=sq8[i-1]*8;
  34. for (i=0;i<4;i++)
  35. {
  36. cin>>temp;
  37. temp--;
  38. tar+=sq8[i]*temp;
  39. }
  40. for (i=7;i>=4;i--)
  41. {
  42. cin>>temp;
  43. temp--;
  44. tar+=sq8[i]*temp;
  45. }
  46. a.data[0]=0;
  47. a.data[1]=1;
  48. a.data[2]=2;
  49. a.data[3]=3;
  50. a.data[4]=7;
  51. a.data[5]=6;
  52. a.data[6]=5;
  53. a.data[7]=4;
  54. temp=0;
  55. for (i=0;i<8;i++)
  56. temp+=sq8[i]*a.data[i];
  57. if (temp==tar)
  58. {
  59. cout<<"0\n";
  60. return(0);
  61. }
  62. used[temp]=true;
  63. a.deep=0;
  64. a.dad=-1;
  65. a.rec=0;
  66. que.push_back(a);
  67. while (tail<que.size())
  68. {
  69. a=que[tail];
  70. /*1*/
  71. for (i=0;i<4;i++)
  72. b.data[i]=a.data[i+4];
  73. for (i=4;i<8;i++)
  74. b.data[i]=a.data[i-4];
  75. temp=0;
  76. for (i=0;i<8;i++)
  77. temp+=sq8[i]*b.data[i];
  78. if (!used[temp])
  79. {
  80. used[temp]=true;
  81. b.deep=a.deep+1;
  82. b.dad=tail;
  83. b.rec=1;
  84. que.push_back(b);
  85. if (temp==tar)
  86. break;/*ans*/
  87. }
  88. /*1*/
  89. /*2*/
  90. b.data[0]=a.data[3];
  91. b.data[1]=a.data[0];
  92. b.data[2]=a.data[1];
  93. b.data[3]=a.data[2];
  94. b.data[4]=a.data[7];
  95. b.data[5]=a.data[4];
  96. b.data[6]=a.data[5];
  97. b.data[7]=a.data[6];
  98. temp=0;
  99. for (i=0;i<8;i++)
  100. temp+=sq8[i]*b.data[i];
  101. if (!used[temp])
  102. {
  103. used[temp]=true;
  104. b.deep=a.deep+1;
  105. b.dad=tail;
  106. b.rec=2;
  107. que.push_back(b);
  108. if (temp==tar)
  109. break;/*ans*/
  110. }
  111. /*2*/
  112. /*3*/
  113. b=a;
  114. b.data[1]=a.data[5];
  115. b.data[2]=a.data[1];
  116. b.data[5]=a.data[6];
  117. b.data[6]=a.data[2];
  118. temp=0;
  119. for (i=0;i<8;i++)
  120. temp+=sq8[i]*b.data[i];
  121. if (!used[temp])
  122. {
  123. used[temp]=true;
  124. b.deep=a.deep+1;
  125. b.dad=tail;
  126. b.rec=3;
  127. que.push_back(b);
  128. if (temp==tar)
  129. break;/*ans*/
  130. }
  131. /*3*/
  132. tail++;
  133. }
  134. temp=que.size()-1;
  135. cout<<que[temp].deep<<endl;
  136. printway(temp);
  137. return(0);
  138. }