Cod sursa(job #2610370)

Utilizator Rares31100Popa Rares Rares31100 Data 4 mai 2020 19:46:37
Problema Pascal Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("pascal.in");
ofstream out("pascal.out");

int n,k;
char nrDiv[5000001];
char nrDiv2[5000001];
int d1,d2,Up;
int dp1,dp2,Up2;
int suma;

int main()
{
    in>>n>>k;

    if(k!=4 && k!=6)
    {
        for(int r=k; r<=n; r*=k)
            for(int l=r; l<=n; l+=r)
                nrDiv[l]++;
    }
    else if(k==4)
    {
        for(int r=2; r<=n; r*=2)
            for(int l=r; l<=n; l+=r)
                nrDiv[l]++;
    }
    else
    {
        for(int r=2; r<=n; r*=2)
            for(int l=r; l<=n; l+=r)
                nrDiv[l]++;

        for(int r=3; r<=n; r*=3)
            for(int l=r; l<=n; l+=r)
                nrDiv2[l]++;
    }

    if(k!=6)
    {
        for(int i=1; i<=n; i++)
            Up+=nrDiv[i];
        d2=Up;
    }
    else
    {
        for(int i=1; i<=n; i++)
            Up+=nrDiv[i];
        d2=Up;
        for(int i=1; i<=n; i++)
            Up2+=nrDiv2[i];
        dp2=Up2;
    }

    for(int i=1; i<=n/2; i++)
    {
        if(k!=6)
        {
            d1+=nrDiv[i];
            d2-=nrDiv[n-i+1];
        }
        else
        {
            d1+=nrDiv[i];
            d2-=nrDiv[n-i+1];
            dp1+=nrDiv2[i];
            dp2-=nrDiv2[n-i+1];
        }

        if(k!=4 && k!=6)
        {
            if(d1+d2<Up)
                suma+=2;
        }
        else if(k==4)
        {
            if( (d1+d2)/2 < Up/2 )
                suma+=2;
        }
        else
        {
            if( min(d1+d2,dp1+dp2) < min(Up,Up2) )
                suma+=2;
        }
    }

    if(n%2==0)
    {
        if(k!=4 && k!=6)
        {
            if(d1+d2<Up)
                suma--;
        }
        else if(k==4)
        {
            if( (d1+d2)/2 < Up/2 )
                suma--;
        }
        else
        {
            if( min(d1+d2,dp1+dp2) < min(Up,Up2) )
                suma--;
        }
    }

    out<<suma;

    return 0;
}