记录编号 240935 评测结果 AAAAAAAAAA
题目名称 雕塑安置 最终得分 100
用户昵称 GravatarKZNS 是否通过 通过
代码语言 C++ 运行时间 1.375 s
提交时间 2016-03-24 08:49:15 内存使用 207.32 MiB
显示代码纯文本
  1. //KZNS
  2. #include <fstream>
  3. using namespace std;
  4. //
  5. ifstream fin ("arrange.in");
  6. ofstream fout ("arrange.out");
  7. //
  8. int N, M;
  9. unsigned int xz[23] = {0};
  10. long long ck[23][1048587] = {0};
  11. bool ud[23][1048587] = {0};
  12. //
  13. void rin() {
  14. fin >> N >> M;
  15. int a, b;
  16. for (int i = 0; i < M; i++) {
  17. fin >> a >> b;
  18. xz[a] |= (1 << (b-1));
  19. }
  20. }
  21. long long CK(int x, unsigned int zz) {
  22. if (ud[x][zz])
  23. return ck[x][zz];
  24. ud[x][zz] = true;
  25. if (x == N) {
  26. for (int i = 0; i < N; i++)
  27. if (!((zz | xz[x]) & (1 << i)))
  28. ck[x][zz]++;
  29. }
  30. else {
  31. for (int i = 0; i < N; i++)
  32. if (!((zz | xz[x]) & (1 << i)))
  33. ck[x][zz] += CK(x + 1, zz | (1 << i));
  34. }
  35. return ck[x][zz];
  36. }
  37. //
  38. int main() {
  39. rin();
  40. fout << CK(1, 0);
  41. return 0;
  42. }
  43. //UBWH