1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include<cstdio>
#include<algorithm>
#include<map>

typedef std::map<int, int> mii;

int n;
int * r;
int * w;
int * t;
int h = 0;
int v = 0;
int * vc;
int * hc;
int result = 0;
mii vm;
mii hm;

void input() {
  scanf("%d", &n);
  r = new int[n];
  w = new int[n];
  t = new int[n];
  for (int i = 0; i < n; ++i) {
    scanf("%d %d %d", r + i, w + i, t + i);
    if (r[i] == 1){
      ++v;
    } else {
      ++h;
    }
  }
}

void remove_duplicates() {

}

void coefficients() {
  hc = new int[h];
  vc = new int[v];
  int vi = 0;
  int hi = 0;
  for (int i = 0; i < n; i++) {
    if (r[i] == 1) {
      vc[vi] = t[i] - w[i];
      ++vi;
    } else {
      hc[hi] = t[i] - w[i];
      ++hi;
    }
  }
}

void print_m(mii & m) {
  printf("\n");
  for (mii::iterator i = m.begin(); i != m.end(); i++) {
    printf("%d %d\n", i -> first, i -> second);
  }
}

int max(int & a, int & b) {
  return a > b ? a : b;
}

int min(int & a, int & b) {
  return a < b ? a : b;
}

void solve() {
  for (int i = 0; i < h; i++) {
    if (hm.find(hc[i]) == hm.end()) {
      hm[hc[i]] = 1;
    } else {
      hm[hc[i]]++;
    }
  }

  for (int i = 0; i < v; i++) {
    if (vm.find(vc[i]) == vm.end()) {
      vm[vc[i]] = 1;
    } else {
      vm[vc[i]]++;
    }
  }

  // print_m(hm);
  // print_m(vm);
  for (mii::iterator it = hm.begin(); it != hm.end(); it++) {
    mii::iterator it2 = vm.find(it -> first);
    if (it2 != vm.end()) {
      result += min(it -> second, it2 -> second);
    }
  }
}

int main() {
  input();
  remove_duplicates();
  coefficients();
  solve();
  printf("%d\n", result);

  // printf("H\n");
  // for (int i = 0; i < h; i++) {
  //   printf("%d\n", hc[i]);
  // }
  //
  // printf("V\n");
  // for (int i = 0; i < v; i++) {
  //   printf("%d\n", vc[i]);
  // }

  return 0;
}