Cod sursa(job #1040574)

Utilizator laurpoppopescu laurentiu laurpop Data 24 noiembrie 2013 17:41:47
Problema Oite Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<fstream>
#include<vector>
#define MOD 666013
#define MAXN 1024+100
using namespace std;
int a[MAXN][MAXN],l,n,t[MAXN];
long long sol;
vector<pair<short,short> > v[MOD+1];
ifstream fin("oite.in");
ofstream fout("oite.out");

void citire()
{
    fin>>n>>l;
    for(int i=1;i<=n;i++)
    {
        fin>>t[i];
    }
}

/*void sume()
{
    int s;
    for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            s=t[i]+t[j];
            v[s%MOD].push_back(make_pair(i,j));
            a[i][j]=s;
            a[j][i]=s;
        }
    }
}
*/
void rezolva()
{
    pair<int, int> p;
    int s;
    for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            s=l-t[i]-t[j];
            if(s>0){
                    int ll=s%MOD;
            for(int k=0;k<v[ll].size();k++)
            {
               if(v[ll][k].first==s)
                {
                    sol+=v[ll][k].second;
                    break;
                }
            }
        }
        }
      for(int j=1;j<i;j++)
      {
          s=t[i]+t[j];
  int          ll=s%MOD;
          int ok=0;
          for(int k=0;k<v[ll].size();k++)
          if(v[ll][k].first==s){
                v[ll][k].second++;
                ok=1;
      }
      if(ok==0)
          v[ll].push_back(make_pair(s,1));
    }
}
}

int main()
{
    citire();
//    sume();
    rezolva();
    fout<<sol;
    return 0;
}