#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(); } } |