Cod sursa(job #2524596)

Utilizator Raresr14Rosca Rares Raresr14 Data 15 ianuarie 2020 21:52:30
Problema Oite Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <vector>
#define MOD 1000007
#define X first
#define Y second
using namespace std;
ifstream fin("oite.in");
ofstream fout("oite.out");
int n,i,v[1030];
vector<pair<int,int> > f[1000010];
long long sol,j,t,L;
int main(){
    fin>>n>>L;
    for(i=1;i<=n;i++)
        fin>>v[i];
    f[(v[1]+v[2])%MOD].push_back({v[1]+v[2],1});
    for(i=3;i<n;i++){
        for(j=i+1;j<=n;j++){
            if(L-v[i]-v[j]<0)
                continue;
            for(int k=0;k<f[(L-(v[i]+v[j]))%MOD].size();k++)
                if(f[(L-(v[i]+v[j]))%MOD][k].X==L-(v[i]+v[j])){
                    sol+=f[(L-(v[i]+v[j]))%MOD][k].Y;
                    break;
                }
        }
         for(t=1;t<i;t++)
            if(!f[(v[t]+v[i])%MOD].size())
                 f[(v[t]+v[i])%MOD].push_back({v[t]+v[i],1});
            else
                for(int k=0;k<f[(v[t]+v[i])%MOD].size();k++)
                    if(f[(v[t]+v[i])%MOD][k].X==v[t]+v[i]){
                        f[(v[t]+v[i])%MOD][k].Y++;
                        break;
                    }
    }
    fout<<sol;
    return 0;
}