Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int mod = 1e9 + 7;
- void solve()
- {
- int n, k;
- cin >> n >> k;
- set < pair < int, int > > s;
- for (int i = 0; i < k; i++)
- {
- pair < int, int > p;
- cin >> p.f >> p.s;
- p.f--;
- s.insert(p);
- }
- vector < int > a(n), b(n), c(n), d(n);
- if (!s.count ({0, 1}) && !s.count ({0, 2})){
- a[0] = 2;
- b[0] = c[0] = d[0] = 1;
- }
- else if (s.count ({0, 1}) && s.count ({0, 2}))
- {
- a[0] = 1, b[0] = c[0] = d[0] = 0;
- }
- else if (s.count ({0, 1}))
- {
- b[0] = a[0] = 1;
- c[0] = d[0] = 0;
- }
- else {
- c[0] = a[0] = 1;
- b[0] = d[0] = 0;
- }
- for (int i = 1; i < n; i++)
- {
- pair < int, int > p1 = {i, 1}, p2 = {i, 2};
- if (!s.count (p1) && !s.count (p2)){
- a[i] = (a[i - 1] * 2 + b[i - 1] + c[i - 1] + d[i - 1]) % mod;
- b[i] = (a[i - 1] + c[i - 1]) % mod;
- c[i] = (a[i - 1] + b[i - 1]) % mod;
- d[i] = a[i - 1] % mod;
- }
- if (s.count (p1) && s.count (p2))
- {
- a[i] = a[i - 1];
- b[i] = 0;
- c[i] = 0;
- d[i] = 0;
- continue;
- }
- if (s.count (p1))
- {
- a[i] = (a[i - 1] + b[i - 1]) % mod;
- b[i] = a[i - 1];
- c[i] = 0;
- d[i] = 0;
- continue;
- }
- if (s.count (p2))
- {
- a[i] = (a[i - 1] + c[i - 1]) % mod;
- c[i] = a[i - 1];
- b[i] = 0;
- d[i] = 0;
- }
- }
- cout << a[n - 1];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement