fork(1) download
  1. #include <stdio.h>
  2. int getNQ(int *t, int p, int n, int m){
  3. int i,cnt=0,k[12]={0};
  4. for(i=m-1;i>0;i--){
  5. if(p-i>-1 && t[p-i]==m-i) return 0;
  6. }
  7. for(i=m-1;i>0;i--){
  8. if(p+i<n && t[p+i]==m-i) return 0;
  9. }
  10. if(m==n) return 1;
  11. t[p]=m++;
  12. for(i=0;i<n;i++){
  13. if(t[i]==0) cnt+=getNQ(t,i,n,m);
  14. }
  15. t[p]=0;
  16. return cnt;
  17. }
  18. int main(void) {
  19. int c, n, t[12], i, cnt;
  20. scanf("%d",&c);
  21. while(c--){
  22. scanf("%d",&n);
  23. cnt = 0;
  24. for(i=0;i<n;i++) t[i]=0;
  25. for(i=0;i<n/2;i++) cnt += getNQ(t,i,n,1);
  26. cnt*=2;
  27. if(n%2==1) cnt += getNQ(t,i,n,1);
  28. printf("%d\n",cnt);
  29. }
  30. return 0;
  31. }
  32. /*
  33. #include <stdio.h>
  34. #include <stdlib.h>
  35. int getNQ(int *t, int p, int n, int m){
  36. int i,cnt=0,k[12]={0};
  37. if(m==n) return 1;
  38. t[p]=m++;
  39. for(i=0;i<n;i++){
  40. if(t[i]!=0){
  41. k[i]=1;
  42. if(i-(m-t[i])>=0) k[i-(m-t[i])]=1;
  43. if(i+(m-t[i])<n) k[i+(m-t[i])]=1;
  44. }
  45. }
  46. for(i=0;i<n;i++){
  47. if(k[i]==0) cnt+=getNQ(t,i,n,m);
  48. }
  49. t[p]=0;
  50. return cnt;
  51. }
  52. int main(void) {
  53. int c, n, t[12], i, cnt;
  54. scanf("%d",&c);
  55. while(c--){
  56. scanf("%d",&n);
  57. cnt = 0;
  58. for(i=0;i<n;i++) t[i]=0;
  59. for(i=0;i<n/2;i++) cnt += getNQ(t,i,n,1);
  60. cnt*=2;
  61. if(n%2==1) cnt += getNQ(t,i,n,1);
  62. printf("%d\n",cnt);
  63. }
  64. return 0;
  65. }
  66. */
Success #stdin #stdout 0.1s 3344KB
stdin
12
1
2
3
4
5
6
7
8
9
10
11
12
stdout
1
0
0
2
10
4
40
92
352
724
2680
14200