#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; } |
English