Cod sursa(job #1548449)

Utilizator Athena99Anghel Anca Athena99 Data 10 decembrie 2015 21:55:12
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

using namespace std;

ifstream fin("triplete.in");
ofstream fout("triplete.out");

typedef unsigned int uint;

const int nmax= 4096;
const int bit= 32;
const int emax= nmax/bit;

int x[nmax+1], y[nmax+1], pre[256];
uint edge[nmax][emax];

int biti1( uint x ) {
    int ans= 0;
    for ( ; x>0; x/= 256 ) {
        ans+= pre[x%256];
    }

    return ans;
}

int main(  ) {
    for ( int i= 1; i<256; ++i ) {
        pre[i]= pre[i/2];
        if ( i%2==1 ) {
            ++pre[i];
        }
    }

    int n, m;
    fin>>n>>m;
    for ( int i= 1; i<=m; ++i ) {
        fin>>x[i]>>y[i];
        --x[i], --y[i];
        edge[x[i]][y[i]/bit]+= ((uint)1<<(y[i]%bit));
        edge[y[i]][x[i]/bit]+= ((uint)1<<(x[i]%bit));
    }

    int sol= 0;
    for ( int i= 1; i<=m; ++i ) {
        for ( int j= 0; j<emax; ++j ) {
            //uint a= ((uint)edge[x[i]][j]&edge[y[i]][j]);
            uint a= 0;
            int b= biti1(a);
            sol+= b;
        }
    }

    fout<<sol/3<<"\n";

    return 0;
}