Pagini recente » Cod sursa (job #675744) | Cod sursa (job #2216190) | Cod sursa (job #1998899) | Cod sursa (job #1963444) | Cod sursa (job #2472814)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("oite.in");
ofstream g("oite.out");
const int MOD = 100003, NMAX = (1 << 10) + 5;
int N, K, A[NMAX];
vector < pair < int, int > > H[MOD + 5];
long long ans = 0;
static inline void Add (int Level, int X)
{
bool Ok = false;
for(auto &it : H[Level])
if(it.first == X)
{
Ok = true;
++it.second;
break;
}
if(!Ok)
H[Level].push_back({X, 1});
return;
}
static inline int Query (int Level, int X)
{
int r = 0;
for(auto it : H[Level])
if(it.first == X)
{
r = it.second;
break;
}
return r;
}
static inline void Read ()
{
f.tie(NULL);
f >> N >> K;
for(int i = 1; i <= N; ++i)
f >> A[i];
return;
}
static inline void Solve ()
{
for(int i = 1; i < N; ++i)
{
for(int j = i + 1; j <= N; ++j)
{
int Sum = A[i] + A[j];
int Diff = K - Sum;
if(Diff < 0)
continue;
ans += 1LL * Query(Diff % MOD, Diff);
}
for(int j = 1; j < i; ++j)
{
int Sum = A[i] + A[j];
Add(Sum % MOD, Sum);
}
}
g << ans << '\n';
return;
}
int main()
{
Read();
Solve();
return 0;
}