#include <cstdio> #include <cstdlib> #include <algorithm> #include <map> using namespace std; void dodaj(map<int, int> &M, int w, int t) { if (M.find(t-w) != M.end()) { M[t-w]++; } else { M[t-w] = 1; } } void wypisz(map<int, int> &M) { for (map<int, int>::iterator it = M.begin(); it != M.end(); it++ ) { printf("%d = %d\n", it->first, it->second); } printf("\n"); } int main() { int n; scanf("%d\n", &n); map<int, int> A, B; for (int i = 0; i < n; ++i) { int r, w, t; scanf("%d %d %d", &r, &w, &t); if (r == 1) { dodaj(A, w, t); } else { dodaj(B, w, t); } } //wypisz(A); //wypisz(B); map<int, int>::iterator it, jt; it = A.begin(); jt = B.begin(); int r = 0; while (it != A.end() && jt != B.end()) { while (it != A.end() && jt != B.end() && it->first < jt->first) { ++it; } while (it != A.end() && jt != B.end() && jt->first < it->first) { ++jt; } if (it != A.end() && jt != B.end() && it->first == jt->first) { r += min(it->second, jt->second); ++it; ++jt; } } printf("%d\n", r); return 0; }
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 | #include <cstdio> #include <cstdlib> #include <algorithm> #include <map> using namespace std; void dodaj(map<int, int> &M, int w, int t) { if (M.find(t-w) != M.end()) { M[t-w]++; } else { M[t-w] = 1; } } void wypisz(map<int, int> &M) { for (map<int, int>::iterator it = M.begin(); it != M.end(); it++ ) { printf("%d = %d\n", it->first, it->second); } printf("\n"); } int main() { int n; scanf("%d\n", &n); map<int, int> A, B; for (int i = 0; i < n; ++i) { int r, w, t; scanf("%d %d %d", &r, &w, &t); if (r == 1) { dodaj(A, w, t); } else { dodaj(B, w, t); } } //wypisz(A); //wypisz(B); map<int, int>::iterator it, jt; it = A.begin(); jt = B.begin(); int r = 0; while (it != A.end() && jt != B.end()) { while (it != A.end() && jt != B.end() && it->first < jt->first) { ++it; } while (it != A.end() && jt != B.end() && jt->first < it->first) { ++jt; } if (it != A.end() && jt != B.end() && it->first == jt->first) { r += min(it->second, jt->second); ++it; ++jt; } } printf("%d\n", r); return 0; } |