Cod sursa(job #1145556)

Utilizator lianaliana tucar liana Data 18 martie 2014 11:56:48
Problema Triplete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#include<vector>
using namespace std;
#define nmax 4100
#define pozmax nmax/30
int n, m, i, a, b, aux, p2[30], c[nmax], r[nmax], poz, conf, rez;
int pr[nmax][pozmax];
vector <int> ma[nmax];
vector <int> ::iterator it;

void citire()
{
    scanf("%ld %ld",&n,&m);
    p2[0]=1;
    for (i=1;i<=n;i++)
    {
        c[i]=i/30;  r[i]=i%30;
        if (i<=30)
            p2[i]=p2[i-1]<<1;
    }

    for (i=1;i<=m;i++)
    {
        scanf("%ld %ld",&a,&b);
        if (a>b)
        {   aux=a;  a=b;    b=aux;}
        ma[a].push_back(b);     pr[a][c[b]]+=p2[r[b]];
    }
}

void rezolvare()
{
    for (i=1;i<=n;i++)
        for (it=ma[i].begin();it!=ma[i].end();it++)
            for(poz=0;poz<=c[n];poz++)
            {
                conf=pr[i][poz]&pr[*it][poz];
                while (conf)
                {
                    conf=conf&(conf-1);
                    rez++;
                }
            }
}

int main()
{
    freopen("triplete.in","r",stdin);
    freopen("triplete.out","w",stdout);
    citire();
    rezolvare();
    printf("%ld",rez);
    return 0;
}