Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. int mod = 1e9 + 7;
  2.  
  3. void solve()
  4. {
  5. int n, k;
  6. cin >> n >> k;
  7. set < pair < int, int > > s;
  8. for (int i = 0; i < k; i++)
  9. {
  10. pair < int, int > p;
  11. cin >> p.f >> p.s;
  12. p.f--;
  13. s.insert(p);
  14. }
  15. vector < int > a(n), b(n), c(n), d(n);
  16. if (!s.count ({0, 1}) && !s.count ({0, 2})){
  17. a[0] = 2;
  18. b[0] = c[0] = d[0] = 1;
  19. }
  20. else if (s.count ({0, 1}) && s.count ({0, 2}))
  21. {
  22. a[0] = 1, b[0] = c[0] = d[0] = 0;
  23. }
  24. else if (s.count ({0, 1}))
  25. {
  26. b[0] = a[0] = 1;
  27. c[0] = d[0] = 0;
  28. }
  29. else {
  30. c[0] = a[0] = 1;
  31. b[0] = d[0] = 0;
  32. }
  33. for (int i = 1; i < n; i++)
  34. {
  35. pair < int, int > p1 = {i, 1}, p2 = {i, 2};
  36. if (!s.count (p1) && !s.count (p2)){
  37. a[i] = (a[i - 1] * 2 + b[i - 1] + c[i - 1] + d[i - 1]) % mod;
  38. b[i] = (a[i - 1] + c[i - 1]) % mod;
  39. c[i] = (a[i - 1] + b[i - 1]) % mod;
  40. d[i] = a[i - 1] % mod;
  41. }
  42. if (s.count (p1) && s.count (p2))
  43. {
  44. a[i] = a[i - 1];
  45. b[i] = 0;
  46. c[i] = 0;
  47. d[i] = 0;
  48. continue;
  49. }
  50. if (s.count (p1))
  51. {
  52. a[i] = (a[i - 1] + b[i - 1]) % mod;
  53. b[i] = a[i - 1];
  54. c[i] = 0;
  55. d[i] = 0;
  56. continue;
  57. }
  58. if (s.count (p2))
  59. {
  60. a[i] = (a[i - 1] + c[i - 1]) % mod;
  61. c[i] = a[i - 1];
  62. b[i] = 0;
  63. d[i] = 0;
  64. }
  65. }
  66. cout << a[n - 1];
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement