Cod sursa(job #1594886)

Utilizator AeroHHorea Stefan AeroH Data 9 februarie 2016 19:52:49
Problema Triplete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
///!!! Prefetch Test !!!
#include <fstream>
using namespace std;

ifstream f("triplete.in");
ofstream g("triplete.out");

int N,M,i,j,r;
unsigned int a[4100][150];//b[4100][150];
int x[67000],y[67000];
int main()
{
    f>>N>>M;
    while(M--)
    {
        f>>x[M]>>y[M];if(x[M]>y[M])swap(x[M],y[M]);
        a[x[M]][y[M]>>5]|=(1<<(y[M]&31));
        //b[y[M]][x[M]>>5]|=(1<<(x[M]&31));
    }
    for(i=0;x[i];++i)
        {
            __builtin_prefetch (&x[i+1], 0, 3);
            __builtin_prefetch (&y[i+1], 0, 3);
            __builtin_prefetch (&x[i+2], 0, 3);
            __builtin_prefetch (&y[i+2], 0, 3);
            for(j=0;(j<<5)<=N;++j)
                {
                    r+=__builtin_popcount(a[x[i]][j]&a[y[i]][j]);
                    __builtin_prefetch (&a[x[i]][j+2], 0, 0);
                    __builtin_prefetch (&a[y[i]][j+2], 0, 0);
                    __builtin_prefetch (&a[x[i]][j+3], 0, 0);
                    __builtin_prefetch (&a[y[i]][j+3], 0, 0);
                    __builtin_prefetch (&a[x[i]][j+4], 0, 0);
                    __builtin_prefetch (&a[y[i]][j+4], 0, 0);
                }
        }
    g<<r;

    return 0;
}