Advertisement
Guest User

J - seerc 2014

a guest
Jan 23rd, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct Triangle {
  6.   int add_l, add_c;
  7.   int sub_l, sub_c;
  8.   int o;
  9.   Triangle () {}
  10.   Triangle (int _add_l, int _add_c, int _sub_l, int _sub_c, int _o) :
  11.     add_l (_add_l), add_c (_add_c), sub_l (_sub_l), sub_c (_sub_c), o (_o) {}
  12. };
  13.  
  14. const int NMAX = 3e4 + 5;
  15.  
  16. Triangle a[NMAX];
  17. int curr[NMAX];
  18.  
  19. int n, m, ans;
  20.  
  21. void press (int col) {
  22.   col -= n;
  23.   if (col < 0 || col >= n) return;
  24.   curr[col] ^= 1;
  25.   if (curr[col]) ++ans;
  26.   else --ans;
  27. }
  28.  
  29. int main() {
  30.   freopen ("j.in", "r", stdin);
  31.   scanf ("%d\n%d\n", &n, &m);
  32.   for (int i = 1; i <= m; ++i) {
  33.     int l, c, p, o;
  34.     scanf ("%d %d %d %d\n", &l, &c, &p, &o);
  35.     l += n, c += n;
  36.     if (o == 0) {
  37.       --c; // mersi rares
  38.       a[i] = {l, c - p + 1, l + p, c, o};
  39.     } else if (o == 1) {
  40.       a[i] = {l, c, l + p, c + p - 1, o};
  41.     } else if (o == 2) {
  42.       --l;
  43.       a[i] = {l - p + 1, c, l + 1, c, o};
  44.     } else if (o == 3) {
  45.       --l;
  46.       --c;
  47.       a[i] = {l - p + 1, c, l + 1, c, o};
  48.     }
  49. //    printf ("%d %d %d %d %d\n", a[i].add_l, a[i].add_c, a[i].sub_l, a[i].sub_c, a[i].o);
  50.   }
  51.  
  52.   int res = 0;
  53.   for (int row = 1; row <= 3 * n; ++row) {
  54.     for (int i = 1; i <= m; ++i) {
  55.       if (row < a[i].add_l || row > a[i].sub_l) {
  56.         continue;
  57.       }
  58.       if (row == a[i].add_l || row == a[i].sub_l) {
  59.         for (int col = a[i].add_c; col <= a[i].sub_c; ++col) {
  60.           press (col);
  61.         }
  62.         continue;
  63.       }
  64.       int o = a[i].o;
  65.       if (o == 0) {
  66.         press (a[i].add_c);
  67.         ++a[i].add_c;
  68.       } else if (o == 1) {
  69.         press (a[i].sub_c);
  70.         --a[i].sub_c;
  71.       } else if (o == 2) {
  72.         ++a[i].add_c;
  73.         press (a[i].add_c);
  74.       } else {
  75.         --a[i].sub_c;
  76.         press (a[i].sub_c);
  77.       }
  78.     }
  79.     if (row - n >= 0 && row - n < n)
  80.       res += ans;
  81.   }
  82.  
  83.   printf ("%d\n", res);
  84.  
  85.   fclose (stdin);
  86.   return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement