比赛 202103省实验桐柏一中普及组联赛 评测结果 C
题目名称 亡羊补牢,未为迟也 最终得分 0
用户昵称 今天作业写了没 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2021-03-22 21:25:41
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int m,n,k,mn=10000000,num,l,p[10][10];
  4. int scp2()
  5. {
  6. for(int i=1;i<=m;i++)
  7. {
  8. for(int j=1;j<=n;j++) if(!p[i][j]) return 0;
  9. }
  10. return 1;
  11. }
  12. scp3(int x,int y)
  13. {
  14. p[x][y]++;
  15. if(x>1 && y>2)p[x-1][y-2]++;
  16. if(y>2)p[x+1][y-2]++;
  17. if(y>1)p[x+2][y-1]++;
  18. p[x+2][y+1]++;
  19. p[x+1][y+2]++;
  20. if(x>1)p[x-1][y+2]++;
  21. if(x>2)p[x-2][y+1]++;
  22. if(x>2 && y>1)p[x-2][y-1]++;
  23. }
  24. scp4(int x,int y)
  25. {
  26. p[x][y]--;
  27. if(x>1 && y>2)p[x-1][y-2]--;
  28. if(y>2)p[x+1][y-2]--;
  29. if(y>1)p[x+2][y-1]--;
  30. p[x+2][y+1]--;
  31. p[x+1][y+2]--;
  32. if(x>1)p[x-1][y+2]--;
  33. if(x>2)p[x-2][y+1]--;
  34. if(x>2 && y>1)p[x-2][y-1]--;
  35. }
  36. void scp(int k)
  37. {
  38. int x=ceil(1.0*k/n),y=(k-1)%n+1;
  39. if(k>m*n)
  40. {
  41. if(scp2())
  42. {
  43. if(l==mn) num++;
  44. if(l<mn)
  45. {
  46. mn=l;
  47. num=1;
  48. }
  49. }
  50. return;
  51. }
  52. scp(k+1);
  53. //
  54. scp3(x,y);
  55. l++;
  56. scp(k+1);
  57. l--;
  58. scp4(x,y);
  59. }
  60. int main()
  61. {
  62. freopen("secretnum.in","r",stdin);
  63. freopen("secretnum.out","r",stdout);
  64. cin>>m>>n;
  65. scp(1);
  66. cout<<mn<<" "<<num;
  67. }