Pagini recente » Cod sursa (job #1160401) | Cod sursa (job #2720459) | Cod sursa (job #2206650) | Cod sursa (job #1798941) | Cod sursa (job #2822136)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("oite.in");
ofstream fout("oite.out");
const int nmax=(1<<10), mod=997;
struct str{
int nr, p;
};
int v[nmax+1];
vector <str> h[nmax+1];
str inh(int a, int b){
str sol;
sol.nr=a;
sol.p=b;
return sol;
}
int cautare(int x){
int a=x%mod;
for(int i=0;i<int(h[a].size());i++){
if(h[a][i].nr==x){
return i;
}
}
return -1;
}
int main(){
int n,l;
fin>>n>>l;
for(int i=1;i<=n;i++){
fin>>v[i];
}
for(int i=3;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
int sv=v[i]+v[j];
int a=cautare(sv);
if(a==-1){
h[sv%mod].push_back(inh(sv,1));
}else{
h[sv%mod][a].p++;
}
}
}
int sol=0;
for(int i=2;i<=n-2;i++){
for(int j=1;j<=i-1;j++){
if(l-v[i]-v[j]>=0){
int a=cautare(l-v[i]-v[j]);
if(a>-1){
sol+=h[(l-v[i]-v[j])%mod][a].p;
}
}
}
for(int j=i+2;j<=n;j++){
int sv=v[i+1]+v[j];
int a=cautare(sv), b=sv%mod;
if(h[b][a].p==1){
h[b][a]=h[b].back();
h[b].pop_back();
}else{
h[b][a].p--;
}
}
}
fout<<sol<<"\n";
return 0;
}