Cod sursa(job #1196994)

Utilizator catalinrebegeaUNIBUC-Claudia Catarig catalinrebegea Data 10 iunie 2014 10:15:46
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#define Nmax 4100
#define Mmax 65600

using namespace std;

unsigned int a[Nmax][Nmax/32],st[Mmax],dr[Mmax];

inline int NrBiti(unsigned int x)
{
    int cnt=0;
    for(;x;x=(x&(x-1)),++cnt);
    return cnt;
}

int main()
{
    int N,M,nr,i,j,x;
    long long sol=0;
    freopen ("triplete.in","r",stdin);
    freopen ("triplete.out","w",stdout);
    scanf("%d%d", &N,&M);
    nr=N/32+1;
    if(N%32==0)
        --nr;
    for(i=1;i<=M;++i)
    {
        scanf("%d%d", &st[i],&dr[i]);
        x=dr[i]/32+1;
        if(dr[i]%32==0)
            --x;
        a[st[i]][x]+=(1<<(32*x-dr[i]));
        x=st[i]/32+1;
        if(st[i]%32==0)
            --x;
        a[dr[i]][x]+=(1<<(32*x-st[i]));
    }
    for(i=1;i<=M;++i)
        for(j=1;j<=nr;++j)
            sol+=NrBiti(a[st[i]][j]&a[dr[i]][j]);
    printf("%lld\n", sol/3);
    return 0;
}