ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1748. Самое сложное число

I cannot detect error (WA1) Please help me :)
Послано Mickkie 25 авг 2013 20:09
#include<stdio.h>
#include<math.h>
#include<map>
using namespace std;
map<unsigned long long,int> M;

int Prime[30]={0,2,3,5,7},Pct=5;
void genprime(int);

int expP[30]={70},solVal[500],ctsol;
unsigned long long solKey[500];
void gensol(unsigned long long,int);
void arrange();

main()
{
    genprime(30);
    gensol(1,1);
    arrange();
    //for (int i=1;i<=ctsol;i++) printf("%lld %d\n",solKey[i],solVal[i]);

    int Test,id;
    unsigned long long n;
    scanf("%d",&Test);
    for (int t=1;t<=Test;t++)
    {
        scanf("%llu",&n);
        id=ctsol;
        while (solKey[id]>n) id--;
        printf("%llu %d\n",solKey[id],solVal[id]);
    }
}
void genprime(int K)
{
    int i,j;
    for (i=11;Pct<K;i+=2) {
        for (j=1;Prime[j]*Prime[j]<=i;j++)
            if (i%Prime[j]==0)
                break;
        if (Prime[j]*Prime[j]>i)
            Prime[Pct++]=i;
    }
    //for (int i=1;i<Pct;i++) printf("%d\t",Prime[i]);
}
void gensol(unsigned long long x,int pID)
{
    int i,pro=1;
    for (i=1;i<30;i++)
        pro*=expP[i]+1;
    M[x]=pro;

    if (log10(x)+log10(Prime[pID])<=18.3 && expP[pID]<expP[pID-1]) {
        expP[pID]++;
        gensol(x*Prime[pID],pID);
        expP[pID]--;
    }
    if (log10(x)+log10(Prime[pID+1])<=18.3 && expP[pID]!=0) {
        expP[pID+1]++;
        gensol(x*Prime[pID+1],pID+1);
        expP[pID+1]--;
    }
}
void arrange()
{
    map<unsigned long long,int>::iterator it;
    for (it=M.begin();it!=M.end();it++) {
        if (it->second > solVal[ctsol]) {
            ctsol++;
            solKey[ctsol]=it->first;
            solVal[ctsol]=it->second;
        }
    }
}