Cod sursa(job #1820448)

Utilizator lauratalaatlaura talaat lauratalaat Data 1 decembrie 2016 18:54:31
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<stdio.h>
#include<vector>
using namespace std;
#define MOD ((1<<22)-1)
int v[1025];
struct bine { int sum ; int o1 ; int o2 ;};
vector<bine>h[MOD+1];
bine p;
void add ( int pi , int pj ){
    int x;
    p.sum=v[pi]+v[pj];
    p.o1=pi;
    p.o2=pj;
    x=p.sum&MOD;
    h[x].push_back(p);
}
int check ( int suma, int pi, int pj){
    int pp,x,i,j;
    x=suma&MOD;
    int cate=0;
    for(i=0;i<h[x].size();i++)
        if(h[x][i].sum==suma)
            if(pj < h[x][i].o1)
                cate++;
    return cate;
}
int main(){
    int n,l,i,j,c,r;
    long long cate;
    freopen("oite.in","r",stdin);
    freopen("oite.out","w",stdout);
    scanf("%d%d",&n,&l);

    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
            if(v[i]+v[j] <= l)
                add(i,j);
    cate=0;
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
            if(v[i] + v[j] <= l)
            {
                c=l-v[i]-v[j];
                r=check(c,i,j);
                cate+=r;
            }

    printf("%lld\n",cate);
    return 0;
}