C++ · Solution

Count Number of Triplets

This C++ solution uses binary search for Count Number of Triplets. Read the reasoning, inspect the code, or try your own test case below.

Sorting & searchingBinary searchC++40 lines
Solution059of 248
Download C++ file ↓ Search the library → Open full Code Lab ↗ Report an issue ↗

Approach

Binary search

Count Number of Triplets: use the monotonic structure of the search space to discard half of the remaining candidates at each step.

Monotonic search

Problem and code

Useful links.

Written by benbenyaojifen. Try the problem first, then compare your approach with the code.

View exact source file ↗
Implementation

count_number_of_triplets.cpp

C++

     
    #include <bits/stdc++.h>
     
    using namespace std;
     
    struct triplet{
        int x, y, z;
        triplet(int a, int b, int c) : x(a), y(b), z(c){}
        bool operator<(const triplet &o) const{
            if(x != o.x) return x < o.x;
            if(y != o.y) return y < o.y;
            return z < o.z;
        }
    };
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        int n;
        cin >> n;
        vector<int> v(n);
        for(int i = 0; i < n; i++){
            cin >> v[i];
        }
        sort(v.begin(), v.end());
        set<triplet> s;
        int cnt = 0;
        for(int i = 0; i < v.size(); i++){
            for(int j = i + 1; j < v.size(); j++){
                int sum = v[i] + v[j];
                auto pos = lower_bound(v.begin(), v.end(), sum);
                if(pos == v.end() || v[pos - v.begin()] != sum) continue;
                if(pos != v.end() && !s.count({v[i], v[j], sum})){
                    cnt++;
                    s.insert({v[i], v[j], sum});
                }
            }
        }
        cout << (cnt == 0 ? -1 : cnt) << '\n';
        return 0;
    }
        

Did this explanation save you time? I'm a Grade 11 student building this free library to make difficult algorithms easier to understand.

Buy me a coffee ↗Keep studying →

Test this problem

Run your code here.

Paste your code, run a test case, compare the output, or trace selected values.

Full trace, comparison & stress testing ↗
StatusReady
Output
No run yet.
Diagnostics
No diagnostics yet.

Each run is isolated and has strict limits. Passing one test does not guarantee the judge will accept the solution.