Cod sursă (job #108994)

Utilizator avatar alexxx Vasilescu Iulius Alexader alexxx IP ascuns
Problemă SCV (clasele 9-10) Compilator cpp | 1,28 kb
Rundă Arhiva de probleme Status evaluat
Dată 22 ian. 2015 15:48:10 Scor 0
#include <cstdio>
int v[10010];
int ptr[17];
int constructor(int a)
{
    int x=0;
    int r,c=1,i=0;
    while(c)
    {
        c=a/2;
        r=a%2;
        x=x+ptr[i]*r;
        i++;
        a=c;
    }
    return x;
}
void init()
{
    int i,a=1;
    ptr[0]=1;
    for(i=1;i<=15;i++)
    {
        ptr[i]=a*3;
        a*=3;
    }
    for(i=1;i<=10000;i++)
    {
        v[i]=constructor(i);
    }
}
int ctbnrx(int x)
{
    int st,dr;
    dr=10000;
    st=1;
    while(st!=dr-1)
    {
        if(x<v[(st+dr)/2]) dr=(st+dr)/2;
        if(x>v[(st+dr)/2]) st=(st+dr)/2;
        if(x==v[(st+dr)/2]) return (st+dr)/2+1;
    }
    return dr;
}
int ctbnry(int x)
{
    int st,dr;
    dr=10000;
    st=1;
    while(st!=dr-1)
    {
        if(x<v[(st+dr)/2]) dr=(st+dr)/2;
        if(x>v[(st+dr)/2]) st=(st+dr)/2;
        if(x==v[(st+dr)/2]) return (st+dr)/2-1;
    }
    return st;
}
int main()
{
    FILE *in,*out;
    in=fopen("trei.in","r");
    out=fopen("trei.out","w");
    int n,p;
    fscanf(in,"%d%d",&n,&p);
    init();
    int i,x,y,r=0;
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d%d",&x,&y);
        x--;
        y++;
        if(ctbnry(y)-ctbnrx(x)+1>=p)
            r++;
    }
    fprintf(out,"%d",r);
    return 0;
}