记录编号 35415 评测结果 AAAAAAAAAA
题目名称 失落的神庙 最终得分 100
用户昵称 GravatarCitron酱 是否通过 通过
代码语言 C++ 运行时间 0.037 s
提交时间 2012-02-21 20:40:34 内存使用 19.34 MiB
显示代码纯文本
#include <fstream>

#define I_F "losttemple.in"
#define O_F "losttemple.out"

const long long P=5000000;

struct lb
{
	long long x,y;
	lb *next;
}*s[P]={NULL};
long long n, ans;

void Input();
long long Search(const long long);
void Output();

int main()
{
	Input();
	ans=Search(n);
	Output();
	return 0;
}

void Input()
{
	std::ifstream fin(I_F);
	fin>>n;
	fin.close();
	
	s[0]=new lb;		s[1]=new lb;
	s[0]->x=0;			s[1]->x=1;
	s[0]->y=1;			s[1]->y=1;
	s[0]->next=NULL;	s[1]->next=NULL;
}

long long Search(const long long x)
{
	for (lb *i=s[x%P]; i!=NULL; i=i->next)
		if (i->x==x)
			return i->y;
	
	if (s[x%P]==NULL)
	{
		s[x%P]=new lb;
		s[x%P]->x=x;
		s[x%P]->next=NULL;
		s[x%P]->y=Search(x/2)+Search(x/3)+Search(x/5)+Search(x/7);
		return s[x%P]->y;
	}
	lb *i=s[x%P];
	while (i->next!=NULL)
		i=i->next;
	i->next=new lb;
	i=i->next;
	i->x=x;
	i->next=NULL;
	i->y=Search(x/2)+Search(x/3)+Search(x/5)+Search(x/7);
	return i->y;
}

void Output()
{
	std::ofstream fout(O_F);
	fout<<ans<<std::endl;
	fout.close();
}