Cod sursa(job #1497141)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 6 octombrie 2015 10:39:32
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <vector>

#define NMAX 1027
#define MOD 69257
#define LL long long

using namespace std;
int n, sum, v[NMAX];
unsigned LL ans;
struct tabel
{
    int val;
    int x;
    int y;
} tmp;
vector <tabel> dsp[MOD];

int main()
{
    freopen("oite.in", "r", stdin);
    freopen("oite.out", "w", stdout);
    scanf("%d %lld", &n, &sum);
    for(int i = 1; i<= n; ++i) scanf("%d", &v[i]);
    for(int i = 1; i<= n; ++i)
    {
        for(int j = i+1; j<= n; ++j)
        {
            tmp.val = v[i]+v[j];
            tmp.x = i;
            tmp.y = j;
            int poz = tmp.val%MOD;
			dsp[poz].push_back(tmp);
        }
    }
    for(int i = 1; i<= n; ++i)
    {
        for(int j = i+1; j<= n; ++j)
        {
        	int poz = (sum - v[i] - v[j])%MOD;
        	int sze = dsp[poz].size();
        	for(int k = 0; k< sze; ++k)
			{
				if(dsp[poz][k].val == sum - v[i] - v[j])
				{
					if(dsp[poz][k].x == i) continue;
					if(dsp[poz][k].x == j) continue;
					if(dsp[poz][k].y == i) continue;
					if(dsp[poz][k].y == j) continue;
					//printf("%d %d %d %d\n", i, j, dsp[poz][k].x, dsp[poz][k].y);
					ans++;
				}
			}
        }
    }
    printf("%lld\n", ans/6);
    return 0;
}