比赛 20121016 评测结果 WAAAWAAAAAWWWWWWWWAW
题目名称 数列求值 最终得分 45
用户昵称 Truth.Cirno 运行时间 0.027 s
代码语言 C++ 内存使用 3.15 MiB
提交时间 2012-10-16 21:57:33
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

unsigned long long rec[100];

int main(void)
{
	freopen("sequenceb.in","r",stdin);
	freopen("sequenceb.out","w",stdout);
	int i,a,b,n,temp,nex[3][3]={{0,1,2},{1,2,0},{2,0,1}};
	int T,f[100]={0};
	cin>>a>>b>>n;
	
	
	
	if (n<=10000000)
	{
		f[0]=1;
		f[1]=1;
		for (i=3;i<=n;i++)
		{
			temp=i%3;
			f[nex[temp][2]]=(a*f[nex[temp][1]]+b*f[nex[temp][0]])%7;
		}
		cout<<f[nex[n%3][2]]<<endl;
	}
	
	
	
	else
	{
		f[1]=1;
		rec[1]=1;
		f[2]=1;
		rec[2]=8;
		for (i=3;i<100;i++)
		{
			f[i]=(a*f[i-1]+b*f[i-2])%7;
			rec[i]=rec[i-1]*7+f[i];
			if (i&1)
				continue;
			temp=i>>1;
			if (rec[temp]*int(pow(7.0,double(temp)))==rec[i]-rec[temp])
				break;
		}
		T=temp;
		n%=T;
		cout<<f[n]<<endl;
	}
	
	
	
	return(0);
}