SRM603 Div2Med - SplitIntoPairs
解法
Xが負であることが保証されるので、正の数×負の数のペアでなければ必ず解に含まれる。また与えられた数列は必ず偶数個の要素であるので、正の数×負の数のペアが現れる場合は、正の数と負の数がそれぞれ奇数個の場合で、この一個だけが解に関わる。解くときはそんな判定をするわけではなくソートして隣同士をペアにしていけばよい。
#include<bits/stdc++.h> using namespace std; #define ALL(c) (c).begin(), (c).end() typedef long long ll; class SplitIntoPairs { public: int makepairs(vector <int> A, int X) { int result = 0; sort(ALL(A)); for(int i=0; i<A.size(); i+=2) if((ll)A[i]*A[i+1] >= X) result ++; return result; } };