记录编号 340027 评测结果 AAAAA
题目名称 [HAOI 2004模拟]数列问题 最终得分 100
用户昵称 GravatarTabing010102 是否通过 通过
代码语言 C++ 运行时间 0.089 s
提交时间 2016-11-06 09:26:36 内存使用 0.23 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. const int maxn = 15+5;
  5. FILE *fin, *fout;
  6. const int pri[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 };
  7. bool vis[maxn];
  8. int ans = 0, n, d[maxn];
  9. void print_d() {
  10. for(int i = 1; i <= n; i++)
  11. fprintf(fout, "%d ", d[i]);
  12. }
  13. bool check(int a) {
  14. int p = lower_bound(pri, pri+15, a)-pri;
  15. if(pri[p] == a) return true;
  16. else return false;
  17. }
  18. void dfs(int dep) {
  19. if(dep == n+1) { print_d(); fprintf(fout, "\n"); ans++; return; }
  20. for(int i = 1; i <= n; i++) if(!vis[i]) {
  21. if(dep == 1) { vis[i] = true; d[dep] = i; dfs(dep+1); vis[i] = false; }
  22. else if(check(d[dep-1]+i)) { vis[i] = true; d[dep] = i; dfs(dep+1); vis[i] = false; }
  23. }
  24. }
  25. int main() {
  26. fin = fopen("dfs3.in", "r");
  27. fout = fopen("dfs3.out", "w");
  28. // fout = stdout;
  29. fscanf(fin, "%d", &n);
  30. dfs(1);
  31. fprintf(fout, "%d", ans);
  32. return 0;
  33. }