Cod sursa(job #1597619)

Utilizator ArceyGeorge Cioroiu Arcey Data 12 februarie 2016 10:28:08
Problema Numarare triunghiuri Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
#include <iostream>
#include <set>
#include <climits>
#include <map>
#include <algorithm>
#include <list>
#include <vector>
#include <utility>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#include <string>
#include <cmath>

using namespace std;

int f(int v[16000], int n, int vm) {
    int ans = 1, aux = vm;
    for (int i = 0; i < n; i++) {
        if (aux >= v[i])
            aux -= v[i];
        else {
            ans++;
            aux = vm - v[i];
        }
    }
    return ans;
}

int main() {
   // freopen("tt.txt", "r", stdin);
    freopen("nrtri.in", "r", stdin);
    freopen("nrtri.out", "w", stdout);

    ios::sync_with_stdio(false);
    cin.tie(0);

    int n, v[800];
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    sort(v, v + n);
    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            int left = j + 1, right = n - 1;
            while (left < right) {
                int mid = (left + right) / 2;
                if (v[mid] > v[i] + v[j])
                    right = mid;
                else
                    left = mid + 1;
            }
            while (v[left] > v[i] + v[j])
                left--;
            ans += left - j;
        }
    }
    cout << ans;

    return 0;
}