Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.21 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<map>
  4. #include<cmath>
  5. #include<string>
  6. #include<fstream>
  7. #include<algorithm>
  8. #include<unordered_set>
  9. #include<iomanip>
  10. #include<set>
  11.  
  12. using namespace std;
  13.  
  14. const int MOD = 1e9 + 7;
  15.  
  16.  
  17. int mod(int n) {
  18.     if (n >= MOD) {
  19.         return n % MOD;
  20.     }
  21.     return n;
  22. }
  23.  
  24. int main() {
  25.     int n, k;
  26.     cin >> n >> k;
  27.    // vector<vector<bool> > used(2, vector<bool> (n + 1, false));
  28.     vector<int> v(n);
  29.     for (int i = 0; i < k; ++i) {
  30.         int x, y;
  31.         cin >> x >> y;
  32.         --x;
  33.         if (y == 2) {
  34.             y = 0;
  35.         }
  36.         v[x] |= (1 << y);
  37.     }
  38.     /*for (int i = 1; i <= n; ++i){
  39.         cout << v[i] << " ";
  40.     }
  41.     cout << endl;*/
  42.     vector<vector<int> > dp(n, vector<int> (4));
  43.     for (int mask = v[1]; mask < 4; ++mask) {
  44.         if (mask == 0) {
  45.             if (v[0] == 0) {
  46.                 dp[0][mask] = 2;
  47.             } else {
  48.                 dp[0][mask] = 1;
  49.             }
  50.         }
  51.         if (mask == 1) {
  52.             if (v[0] == 1 || v[0] == 3) {
  53.                 dp[0][mask] = 0;
  54.             } else {
  55.                 dp[0][mask] = 1;
  56.             }
  57.         }
  58.         if (mask == 2) {
  59.             if (v[0] == 2 && v[0] == 3) {
  60.                 dp[0][mask] = 0;
  61.             } else {
  62.                 dp[0][mask] = 1;
  63.             }
  64.         }
  65.         if (mask == 3 && v[0] == 0) {
  66.             dp[0][mask] = 1;
  67.         }
  68.     }
  69.  
  70.     for (int i = 1; i < n; ++i) {
  71.         for (int mask = v[i + 1]; mask < 4; ++mask) {
  72.             if (mask == 0) {
  73.                 dp[i][mask] = mod(mod(mod(2 * dp[i - 1][0]) + dp[i - 1][1]) + mod(dp[i - 1][2] + dp[i - 1][3]));
  74.             }
  75.             if (mask == 1) {
  76.                 dp[i][mask] = mod(dp[i - 1][0] + dp[i - 1][2]);
  77.             }
  78.             if (mask == 2) {
  79.                 dp[i][mask] = mod(dp[i - 1][0] + dp[i - 1][1]);
  80.             }
  81.             if (mask == 3) {
  82.                 dp[i][mask] = dp[i - 1][0];
  83.             }
  84.         }
  85.     }
  86.     for (int i = 0; i < n; ++i) {
  87.         for (int mask = 0; mask < 4; ++mask) {
  88.             cout << dp[i][mask] << " ";
  89.         }
  90.         cout << endl;
  91.     }
  92.     cout << dp[n - 1][0];
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement