Pagini recente » Cod sursa (job #2972550) | Cod sursa (job #3287027) | Cod sursa (job #1592185) | Cod sursa (job #2157513) | Cod sursa (job #539557)
Cod sursa(job #539557)
#include <cstdio>
#include <vector>
#define f first
#define s second
using namespace std;
vector < pair<int,int > > v[(1 << 22) + 5];
const int N = 1028;
const int MOD = 1 << 22;
int C[N], n, L, val;
int find(int i1, int i2) {
int i, nr = 0;
int val = (L - C[i1] - C[i2]);
int k = val % MOD;
int m = max(i1, i2);
if(val > 0) {
for(i = 0 ; i < v[k].size(); ++i)
if(C[v[k][i].f] + C[v[k][i].s] == val && v[k][i].f > m && v[k][i].s > m)
++nr;//, printf("%d %d %d %d\n", i1, i2, v[k][i].f, v[k][i].s);
}
return nr;
}
int main() {
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
int i, nr = 0, j;
scanf("%d %d", &n, &L);
for(i = 1; i <= n; ++i)
scanf("%d", &C[i]);
for(i = 1; i <= n; ++i)
for(j = i + 1; j <= n; ++j)
v[(C[i] + C[j]) % MOD].push_back(make_pair(i, j));
for(i = 1; i <= n; ++i)
for(j = i + 1;j <= n; ++j)
nr += find(i, j);
/*
for(i = 1; i <= MOD; ++i)
if(v[i].size()) {
printf("%d\n", i);
for(j = 0; j < v[i].size(); ++j)
printf("%d %d\n", C[v[i][j].f], C[v[i][j].s]);
printf("\n");
}
*/
printf("%d\n", nr);
return 0;
}