Cod sursa(job #16328)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 12 februarie 2007 21:12:03
Problema Triplete Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#define AMAX 4100
#define NMAX 140
#define MMAX 66000
#define B 24

int A[AMAX][NMAX], Cs[MMAX], Cd[MMAX], N, M;
int V[(1<<B)+10];

int main()
{
        int i, j, k, g, p, l, num = 0;

        freopen("triplete.in", "r", stdin);
        scanf("%d %d", &N, &M);

        for (i = 0, l = (1<<B); i < l; i++, num = 0)
        {
            for (j = 0; j < B; j++) num += ((i>>j)&1);
            V[i] = num;
        }

        for (k = 0; k < M; k++)
        {
                scanf("%d %d", &i, &j);
                Cs[k] = i; Cd[k] = j;
                p = j/B; g = j%B;
                A[i][p] += (1<<g);
                p = i/B; g = i%B;
                A[j][p] += (1<<g);
        }

        for (i = num = 0; i < M; i++)
                for (j = 0; j <= M/B; j++) num += V[ A[ Cs[i] ][j]&A[ Cd[i] ][j] ];

        freopen("triplete.out", "w", stdout);
        printf("%d\n", num/3);

        return 0;
        
}