Cod sursa(job #7524)

Utilizator filipbFilip Cristian Buruiana filipb Data 21 ianuarie 2007 16:46:45
Problema Triplete Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>
#define NMax 16

int N, M, nr_bit[1<<NMax], D[4096][4096/NMax + 5], x[65537], y[65537], cnt = 0;

int main(void)
{
    int i, j, octet, p;
    
    freopen("triplete.in", "r", stdin);
    freopen("triplete.out", "w", stdout);
    
    for (i = 0; i < (1<<NMax); i++)
        for (j = 0; j < NMax; j++)
            if (i & (1<<j))
               nr_bit[i]++;
               
    scanf("%d %d", &N, &M);
    for (p = 1; p <= M; p++)
    {
        scanf("%d %d", &i, &j);        
        i--; j--;    
        octet = j/NMax; D[i][octet] += (1<<(j & NMax));
        octet = i/NMax; D[j][octet] += (1<<(i & NMax));
        
        x[p] = i; y[p] = j;
    }
    
    p = N/NMax;
    for (i = 1; i <= M; i++)
        for (j = 0; j <= p; j++)
            cnt += nr_bit[D[x[i]][j] & D[y[i]][j]];        
        
    printf("%d\n", cnt/3);
    
    return 0;
}