Cod sursa(job #1512147)

Utilizator ade_tomiEnache Adelina ade_tomi Data 27 octombrie 2015 18:50:32
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<iostream>
#include<fstream>
#include<vector>
#define mod 666013
using namespace std;
int l,n;

struct str
{

    int oita1,oita2,sum;
    str(int xx=0,int yy=0, int ss=0)
    {

        oita1=xx;
        oita2=yy;
        sum=ss;
    }
};
vector<str> v[1024*1024/2+3];
bool find(str x)
{
    int i;

    int q=(l-x.sum)%mod;
    for(i=0;i<v[q].size();i++)
    {

        //if(v[q][i].oita1!=x.oita1&&v[q][i].oita2!=x.oita2&&v[q][i].sum==l-x.sum&&v[q][i].oita1!=x.oita2&&v[q][i].oita2!=x.oita1){
            if(v[q][i].oita1<x.oita1&&v[q][i].oita2<x.oita1&&v[q][i].sum==l-x.sum){
           // cout<<v[q][i].oita1<<" "<<v[q][i].oita2<<" "<<v[q][i].sum<<"    "<<x.oita1<<" "<<x.oita2<<" "<<x.sum<<"\n";
            return 1;
        }
    }
    return 0;
}
void add(str x)
{

    int q=x.sum%mod;
    v[q].push_back(x);
}
int a[1400];
int main()
{
    int i,sol=0;
    ifstream cin("oite.in");
    ofstream cout("oite.out");
    cin>>n>>l;
    sol=0;
    for(i=1;i<=n;i++)
    {

        cin>>a[i];
        for(int j=1;j<i;j++){
            if(a[i]+a[j]<=l){
            sol+=find(str(j,i,a[i]+a[j]));
            add(str(j,i,a[i]+a[j]));
            }
        }
    }
    cout<<sol;
    return 0;

}