読者です 読者をやめる 読者になる 読者になる

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