Cod sursa(job #2640888)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 8 august 2020 21:14:36
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <cstdio>
using namespace std;
const int NMAX = 5000000;
int p1[NMAX + 5] , p2[NMAX + 5];
void build(int p[] , int n , int d)
{
    int x , i , j;
    x = d;
    i = 1;
    while(x <= n)
    {
        j = 1;
        while(x * j <= n)
        {
            if(j % d != 0)
                p[x * j] = i;
            ++ j;
        }
        ++ i;
        x *= d;
    }
}
int main()
{
    freopen("pascal.in" , "r" , stdin);
    freopen("pascal.out" , "w" , stdout);
    int n , d , i , nr , x;
    scanf("%d%d", &n , &d);
    if(d != 4 && d != 6)
    {
        build(p1 , n , d);
        for(i = 1 ; i <= n ; i ++)
            p1[i] += p1[i - 1];
        nr = 0;
        n --;
        for(i = 1 ; i <= n / 2 ; i ++)
            if(p1[n + 1] - p1[i] - p1[n + 1 - i] > 0)
                nr ++;
        nr = nr * 2;
        x = (n + 1) / 2;
        if(n % 2 == 1 && p1[n + 1] - p1[x] - p1[n + 1 - x] > 0)
            nr ++;
        printf("%d\n" , nr);
    }
    else if(d == 4)
    {
        build(p1 , n , 2);
        for(i = 1 ; i <= n ; i ++)
            p1[i] += p1[i - 1];
        nr = 0;
        n --;
        for(i = 1 ; i <= n / 2 ; i ++)
            if(p1[n + 1] - p1[i] - p1[n + 1 - i] > 1)
                nr ++;
        nr = nr * 2;
        x = (n + 1) / 2;
        if(n % 2 == 1 && p1[n + 1] - p1[x] - p1[n + 1 - x] > 1)
            nr ++;
        printf("%d\n" , nr);
    }
    else
    {
        build(p1 , n , 2);
        build(p2 , n , 3);
        for(i = 1 ; i <= n ; i ++)
        {
            p1[i] += p1[i - 1];
            p2[i] += p2[i - 1];
        }
        nr = 0;
        n --;
        for(i = 1 ; i <= n / 2 ; i ++)
            if(p1[n + 1] - p1[i] - p1[n + 1 - i] > 0 && p2[n + 1] - p2[i] - p2[n + 1 - i] > 0)
                nr ++;
        nr = nr * 2;
        x = (n + 1) / 2;
        if(n % 2 == 1 && p1[n + 1] - p1[x] - p1[n + 1 - x] > 0 && p2[n + 1] - p2[x] - p2[n + 1 - x] > 0)
            nr ++;
        printf("%d\n" , nr);
    }
    return 0;
}