C. Otro problema más de conteo (leyes, matemáticas)

C. Otro problema más de conteo

CF 1342C

Título: ttt pruebas, cada prueba dadaa, b, qa, b, qa , b , q
seguido deqqq veces consultas, dadoli, ri l_i, r_ilyo,ryo, Pregunta [li, ri] [l_i, r_i][ lyo,ryo] En el intervalo tal que((x mod a) mod b) ≠ ((x mod b) mod a) ((x \ bmod a) \ bmod b) \ ne ((x \ bmod b) \ bmod a)( ( xm o da )m o db )=( ( xm o db )m o da ) el número de dígitos x

Idea:
Encuentre la ley ( a <b a <buna<b )
每个 使得((x mod a) mod b) = ((x mod b) mod a) ((x \ bmod a) \ bmod b) = ((x \ bmod b) \ bmod a)( ( xm o da )m o db )=( ( xm o db )m o da ) se establece en el rango[1, b - 1], [mcm (a, b), mcm (a, b) + b - 1] [1, b-1], [mcm (a, b), mcm (a, b) + b-1][ 1 ,si-1 ] ,[ l c m ( una ,b ) ,l c m ( una ,b )+si-1 ]
ri - li + 1 r_i-l_i + 1ryo-lyo+1 número menos el número establecido:[1, rii] [1, r_ii][ 1 ,ryoi ] el número de establecimientosco coc o menos[1, li - 1] [1, l_i-1][ 1 ,lyo-1 ] el número de establecimientospr prp r

int n;
/*int main(){///找规律部分
    LL l,a=7ll,b=14ll,r,ans;
    for(int i=1;i<=200;i++){
        if((i%a)%b==(i%b)%a)
            cout<<i<<" ";
    }
    return 0;
}*/
LL ans[maxn];
int main(){
    
    
    int t,f1=0,f0=0,len,q;
    LL l,a,b,r,tt,co,pr,minn,maxx;
    t=ird();
    while(t--){
    
    
        a=lrd();b=lrd();q=ird();
        tt=llcm(a,b);
        if(a>b)swap(a,b);
        if(a==b||b%a==0){
    
    
            for(int i=1;i<=q;i++){
    
    l=lrd();r=lrd();}
            for(int i=1;i<=q;i++)
                cout<<0<<" ";
            cout<<endl;
            continue;
        }
        for(int i=1;i<=q;i++){
    
    
            l=lrd();r=lrd();
            co=r/tt*b;
            if(r<r/tt*tt+b-1&&co){
    
    co-=r/tt*tt+b-1-r;}
            pr=(l-1)/tt*b;
            if((l-1)<(l-1)/tt*tt+b-1&&pr){
    
    pr-=(l-1)/tt*tt+b-1-l+1;}
            co-=pr;
            ans[i]=r-l+1-co;
            minn=min(r,b-1ll);
            maxx=max(l,1ll);
            if(minn>=maxx)ans[i]-=minn-maxx+1;
        }
        for(int i=1;i<=q;i++)
            cout<<ans[i]<<" ";
        cout<<endl;
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44986601/article/details/105829414
Recomendado
Clasificación