Cod sursa(job #1764240)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 25 septembrie 2016 12:10:26
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#include <algorithm>
#define mod 666013
#define lim 1025
using namespace std;
int v[lim],next[lim*lim],lista[mod],k;
struct sume{int s,x,y;};
sume sum[lim*lim];
void adauga(int val,int a,int b){
    int ind=val%mod;
    k++;
    sum[k].s=val;
    sum[k].x=a;
    sum[k].y=b;
    next[k]=lista[ind];
    lista[ind]=k;
}
long long verif(int val,int a,int b){
    int ind;
    long long rasp=0;
    if(val<=0)
        return 0;
    ind=lista[val%mod];
    while(ind!=0){
        if(sum[ind].s==val&&sum[ind].x>b&&sum[ind].y>b)
            rasp++;
        ind=next[ind];
    }
    return rasp;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("oite.in","r");
    fout=fopen("oite.out","w");
    int i,j,n,l;
    long long rasp=0;
    fscanf(fin,"%d%d",&n,&l);
    for(i=1;i<=n;i++)
        fscanf(fin,"%d",&v[i]);
    sort(v+1,v+n+1);
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
            adauga(v[i]+v[j],i,j);
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
            rasp=rasp+verif(l-(v[i]+v[j]),i,j);
    fprintf(fout,"%lld",rasp);
    fclose(fin);
    fclose(fout);
    return 0;
}