#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define rep(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i<=koniec; ++i)
#define repr(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i>=koniec; --i)
#define pb push_back
#define pob pop_back
#define eb emplace_back
#define pf push_front
#define pof pop_front
#define st first
#define nd second
#define bend(X) X.begin(),X.end()
#define sz(X) (int(X.size()))
#define graph vector<node>
#define print cout<<
#ifdef LOCAL
#define nl endl
#define dbg(x) cout << #x << " = " << x << ' ';
#define say(x) cout << x
#else
#define nl '\n'
#define dbg(x)
#define say(x)
#endif
using namespace std;
using namespace __gnu_pbds;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using pli = pair<ll,int>;
using vb = vector<bool>;
using vc = vector<char>;
using vi = vector<int>;
using vl = vector<ll>;
using vpi = vector<pii>;
using vpl = vector<pll>;
using vvi = vector<vi>;
using vvl = vector<vl>;
using vvb = vector<vb>;
template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;
template<typename T1, typename T2> istream& operator>>(istream& is, pair<T1,T2>& x){
is >> x.st >> x.nd;
return is;
}
template<typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1,T2>& x){
os << '(' << x.st << ',' << x.nd << ')';
return os;
}
template<typename T> istream& operator>>(istream& is, vector<T>& x){
for(T& i : x)is >> i;
return is;
}
template<typename T> ostream& operator<<(ostream& os, vector<T> x){
for(T& i : x)os << i << ' ';
return os;
}
template<typename T1, typename T2> pair<T1,T2> operator+(const pair<T1,T2>& A, const pair<T1,T2>& B){
return {A.st + B.st, A.nd + B.nd};
}
template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A, const pair<T1,T2>& B){
return {A.st - B.st, A.nd - B.nd};
}
template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A){
return {-A.st, -A.nd};
}
template<typename T1, typename T2> void mine(T1& A, const T2& B){if(B < A) A = B;}
template<typename T1, typename T2> void maxe(T1& A, const T2& B){if(B > A) A = B;}
const int INF = (int)2e9;
const ll INFll = (ll)9e18;
const int MOD = (int)1e9+7;
int R(int pocz, int kon){
return (rand()%(kon-pocz+1) + pocz);
}
ll RR(ll pocz, ll kon){
return ((ll((rand()) << 30) + rand())/(kon-pocz+1) + pocz);
}
void fastDataTransfer(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
const int N = 1e6+5;
int n, m, a, b, c, d, q, k;
int T[N*2+5][3];
void read(){
cin >> n;
rep(i,1,n){
cin>>a>>b>>c;
T[b-c+N][a]++;
}
int ans = 0;
rep(i,0,int(N)*2)
ans+=min(T[i][1],T[i][2]);
print ans << nl;
}
void solve(){
}
int main(){
fastDataTransfer();
int testCases = 1;
// cin >> testCases;
rep(testNumber, 1, testCases){
read();
solve();
}
}
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 115 116 117 118 119 120 121 122 123 124 | #include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define rep(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i<=koniec; ++i) #define repr(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i>=koniec; --i) #define pb push_back #define pob pop_back #define eb emplace_back #define pf push_front #define pof pop_front #define st first #define nd second #define bend(X) X.begin(),X.end() #define sz(X) (int(X.size())) #define graph vector<node> #define print cout<< #ifdef LOCAL #define nl endl #define dbg(x) cout << #x << " = " << x << ' '; #define say(x) cout << x #else #define nl '\n' #define dbg(x) #define say(x) #endif using namespace std; using namespace __gnu_pbds; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int,int>; using pll = pair<ll,ll>; using pli = pair<ll,int>; using vb = vector<bool>; using vc = vector<char>; using vi = vector<int>; using vl = vector<ll>; using vpi = vector<pii>; using vpl = vector<pll>; using vvi = vector<vi>; using vvl = vector<vl>; using vvb = vector<vb>; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; template<typename T1, typename T2> istream& operator>>(istream& is, pair<T1,T2>& x){ is >> x.st >> x.nd; return is; } template<typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1,T2>& x){ os << '(' << x.st << ',' << x.nd << ')'; return os; } template<typename T> istream& operator>>(istream& is, vector<T>& x){ for(T& i : x)is >> i; return is; } template<typename T> ostream& operator<<(ostream& os, vector<T> x){ for(T& i : x)os << i << ' '; return os; } template<typename T1, typename T2> pair<T1,T2> operator+(const pair<T1,T2>& A, const pair<T1,T2>& B){ return {A.st + B.st, A.nd + B.nd}; } template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A, const pair<T1,T2>& B){ return {A.st - B.st, A.nd - B.nd}; } template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A){ return {-A.st, -A.nd}; } template<typename T1, typename T2> void mine(T1& A, const T2& B){if(B < A) A = B;} template<typename T1, typename T2> void maxe(T1& A, const T2& B){if(B > A) A = B;} const int INF = (int)2e9; const ll INFll = (ll)9e18; const int MOD = (int)1e9+7; int R(int pocz, int kon){ return (rand()%(kon-pocz+1) + pocz); } ll RR(ll pocz, ll kon){ return ((ll((rand()) << 30) + rand())/(kon-pocz+1) + pocz); } void fastDataTransfer(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } const int N = 1e6+5; int n, m, a, b, c, d, q, k; int T[N*2+5][3]; void read(){ cin >> n; rep(i,1,n){ cin>>a>>b>>c; T[b-c+N][a]++; } int ans = 0; rep(i,0,int(N)*2) ans+=min(T[i][1],T[i][2]); print ans << nl; } void solve(){ } int main(){ fastDataTransfer(); int testCases = 1; // cin >> testCases; rep(testNumber, 1, testCases){ read(); solve(); } } |
English