Cod sursa(job #2396157)

Utilizator dobrandreiAndrei Dobra dobrandrei Data 3 aprilie 2019 11:37:12
Problema Oite Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <vector>
using namespace std;
FILE *in,*out;
const int ma=1e5;
int c,l;
int a[1026];

vector <pair<int,int>> v[ma];

void read(){
    fscanf(in,"%d %d",&c,&l);
    for(int i=1;i<=c;i++)
        fscanf(in,"%d",&a[i]);
}

void add(int x){
    for(auto &y:v[x%ma]){
        if(y.first==x){
            y.second++;
            return;
        }
    }
    v[x%ma].push_back({x,1});
}
int find(int x){
    for(auto y:v[x%ma]){
        if(y.first==x)
            return y.second;
    }
    return 0;
}

void solve(){
    int sol=0;
    for(int i=2;i<c;i++){
        for(int j=i+1;j<=c;j++)
          if(a[i]+a[j]<=l)
            sol+=find(l-a[i]-a[j]);
        for(int j=i-1;j>=1;j--)
            add(a[i]+a[j]);
    }
    fprintf(out,"%d",sol);
}
int main(){
    in=fopen("oite.in","r");
    out=fopen("oite.out","w");
    read();
    solve();
    return 0;
}