Cod sursa(job #1940151)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 26 martie 2017 14:19:29
Problema Oite Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <vector>
#define MOD 997846
using namespace std;
vector <pair <int,int> > l[1000000];
int v[1025];
int main()
{
    FILE *fin=fopen ("oite.in","r");
    FILE *fout=fopen ("oite.out","w");
    int i,j,k,n,s,sum,sol=0;
    fscanf (fin,"%d%d",&n,&s);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&v[i]);
    l[(v[1]+v[2])%MOD].push_back (make_pair (v[1]+v[2],1));
    for (i=3;i<n;i++){
        for (j=i+1;j<=n;j++){
            //if (i==7 && j==8)
              //  printf ("a");
            sum=(s-v[i]-v[j])%MOD;
            if (sum<0)
                continue;
            for (k=0;k<l[sum].size();k++)
                if (l[sum][k].first==s-v[i]-v[j]){
                    sol+=l[sum][k].second;
                    break;
                }
        }
        for (j=i-1;j>0;j--){
            sum=(v[i]+v[j])%MOD;
            for (k=0;k<l[sum].size();k++)
                if (l[sum][k].first==v[i]+v[j]){
                    l[sum][k].second++;
                    break;
                }
            if (k<l[sum].size() || l[sum].size()==0)
                l[sum].push_back (make_pair (v[i]+v[j],1) );
        }
    }
    fprintf (fout,"%d",sol);
    return 0;
}