Cod sursa(job #1343630)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 15 februarie 2015 18:08:04
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
//solutie n^2 pentru s<=10 ^ 6

#include <fstream>
#define nmax 1005
#define mil 1000005
using namespace std;
ifstream f("oite.in");
ofstream g("oite.out");
long long sol,x;
int n,s,s1,sol1;
int v[nmax];
int t[mil*2],c[mil];

int main()
{
    int i,j;
    f>>n>>s;
    if (n<4) {
        g<<0;
        return 0;
    }

    for (i=1;i<=n;i++) {
        f>>x;
        if (x<=s) {
            v[i]=x;
        } else {
            n--;
            i--;
        }
    }
    for (i=1;i<=n;i++)
        c[v[i]]++;

    for (i=1;i<=n;i++)
        for (j=i+1;j<=n;j++)
            t[v[i]+v[j]]++;


    for (i=1;i<=n;i++)
        for (j=i+1;j<=n;j++) {
            c[v[i]]--;
            c[v[j]]--;

            s1=s-v[i]-v[j];
            if (s1>=0) {
                sol1=t[s1];
                if (v[i]+v[j]==s1)
                        sol1--;
                sol1-=c[s1-v[i]];
                sol1-=c[s1-v[j]];

                sol+=1LL*sol1;

                }
        c[v[i]]++;
        c[v[j]]++;
        }
    g<<sol/6;

    return 0;
}