Cod sursa(job #1764914)

Utilizator nnnmmmcioltan alex nnnmmm Data 26 septembrie 2016 09:01:01
Problema Oite Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia1-hashuri.rabinkarp Marime 1.14 kb
#include<cstdio>
#include<vector>
const int MOD=10007,NMAX=1024;
int v[NMAX+1];
std::vector<std::pair<int,int> > map[MOD];

void Add(int x)
{
 int r=x%MOD;
 for(std::vector<std::pair<int,int> >::iterator i=map[r].begin();i!=map[r].end();i++)
     {
      if(i->first==x)
         {
          i->second++;
          return;
         }
     }
 map[r].push_back(std::make_pair(x,1));
}

int Find(int x)
{
 int r=x%MOD;
 for(std::vector<std::pair<int,int> >::iterator i=map[r].begin();i!=map[r].end();i++)
     {
      if(i->first==x)
         {
          return i->second;
         }
     }
 return 0;
}

int main()
{
 int c,l;
 FILE *file=fopen("oite.in","r");
 fscanf(file,"%d %d",&c,&l);
 for(int i=1;i<=c;i++)
     fscanf(file,"%d ",&v[i]);
 fclose(file);
 long long rasp=0;
 for(int i=1;i<c;i++)
     {
      for(int j=i+1;j<=c;j++)
          {
           if(l-v[i]-v[j]>=0)
              {
               rasp+=Find(l-v[i]-v[j]);
              }
          }
      for(int j=1;j<i;j++)
          Add(v[i]+v[j]);
     }
 file=fopen("oite.out","w");
 fprintf(file,"%lld\n",rasp);
 fclose(file);
 return 0;
}