显示代码纯文本
#include <algorithm>
#include <cstdio>
#include <map>
#include <vector>
typedef long long ll;
using namespace std;
ll N, A, B;
map<ll, ll> mp;
vector<ll> vec;
ll ans;
int main() {
freopen("Compatible.in", "r", stdin);
freopen("Compatible.out", "w", stdout);
scanf("%lld %lld %lld", &N, &A, &B);
for (int i = 1; i <= N; ++i) {
ll n, d;
scanf("%lld %lld", &n, &d);
mp[d] = n;
vec.push_back(d);
}
sort(vec.begin(), vec.end());
for (const ll key : vec) {
if (mp[B - key] > 0 && B - key >= 0) {
if (B - key == key) {
ans += mp[key] / 2;
mp[key] %= 2;
} else {
ll minus = min(mp[B - key], mp[key]);
ans += minus;
mp[B - key] -= minus;
mp[key] -= minus;
}
}
if (mp[A - key] > 0 && A - key >= 0) {
if (A - key == key) {
ans += mp[key] / 2;
mp[key] %= 2;
} else {
ll minus = min(mp[A - key], mp[key]);
ans += minus;
mp[A - key] -= minus;
mp[key] -= minus;
}
}
}
printf("%lld\n", ans);
return 0;
}