Pagini recente » Cod sursa (job #2212247) | Cod sursa (job #2149239) | Cod sursa (job #93668) | Cod sursa (job #999700) | Cod sursa (job #1776466)
#include <bits/stdc++.h>
#define MOD 32767
using namespace std;
int n,s,i,v[1030],sol,j,k;
vector<int>hs[MOD+10];
vector <int>:: iterator it;
class InputReader {
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
int main()
{
InputReader f ("oite.in");
freopen("oite.out","w",stdout);
f>>n>>s;
for(i=1; i<=n; ++i)
f>>v[i];
for(i=1; i<=n; ++i)
{
for(j=i+1; j<=n; ++j)
if(s-v[i]-v[j]>=0)
/// for(k=0; k<hs[(s-v[i]-v[j])%MOD].size(); ++k)
/// if(hs[(s-v[i]-v[j])%MOD][k]==s-v[i]-v[j])++sol;
for(it=hs[(s-v[i]-v[j])%MOD].begin(); it<hs[(s-v[i]-v[j])%MOD].end(); ++it)
if(*it==s-v[i]-v[j])++sol;
for(j=1; j<i; ++j)
hs[(v[i]+v[j])%MOD].push_back(v[i]+v[j]);
}
printf("%d\n",sol);
return 0;
}