Cod sursa(job #1715286)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 10 iunie 2016 11:30:12
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
# include <fstream>
# include <vector>
# define DIM 1034
# define MOD 3000010
# define f first
# define s second
using namespace std;
ifstream fin("oite.in");
ofstream fout("oite.out");
vector <pair<int,int> > Rest[MOD+5];
int v[DIM],n,val,i,j,r,a,b,poz;
long long sol;
int main () {
    fin>>n>>val;
    for(i=1;i<=n;i++)
        fin>>v[i];
    Rest[(v[1]+v[2])%MOD].push_back(make_pair(v[1]+v[2],1));
    for(i=3;i<=n-1;i++){
        for(j=i+1;j<=n;j++){
            a=(v[i]+v[j])%MOD;
            b=val%MOD-a;
            if(b>=MOD)
                b-=MOD;
            if(b<0)
                b+=MOD;
            for(r=0;r<Rest[b].size();r++){
                if(v[i]+v[j]+Rest[b][r].f==val)
                    sol+=Rest[b][r].s;
            }
        }
        for(j=i-1;j>=1;j--){
            a=(v[i]+v[j])%MOD;
            poz=-1;
            for(r=0;r<Rest[a].size();r++){
                if(Rest[a][r].f==v[i]+v[j]){
                    Rest[a][r].s++;
                    poz=r;
                }
            }
            if(poz==-1)
                Rest[a].push_back(make_pair(v[i]+v[j],1));
        }
    }
    fout<<sol<<"\n";
    return 0;
}