| 题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
|---|---|---|---|---|---|
| Number Sequence | ★☆☆☆☆ | 答案正确 | 100 | 2015-02-06 11:36:22 | 遗漏情况(0) |
已知f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7,求f(n)。
| 1005.cpp代码已折叠
展开折叠内容
|
|---|
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define ci const int &
const int nv2(ci _x,ci _y)
{
return _x*9+_y;
}
int a[1000000]={},last[700],A,B,C,repeatBegin,repeatEnd,repeatLen;
int main()
{
while(1)
{
memset(last,0,sizeof(last));
a[1]=a[2]=1;
cin>>A>>B>>C;
if(!A&&!B&&!C)//fixed遗漏结尾判断//
return 0;
if(C<=2)//fixed增加C<=2特判//
{
cout<<1<<endl;
continue;
}
last[nv2(1,1)]=2;
for(int i=3;i<=C;++i)
{
a[i]=(A*a[i-1]+B*a[i-2])%7;
if(last[nv2(a[i],a[i-1])])
{
repeatBegin=last[nv2(a[i],a[i-1])]+1;
repeatEnd=i;
repeatLen=repeatEnd-repeatBegin+1;
cout<<a[(C-repeatBegin+1)%repeatLen+repeatBegin-1]<<endl;
break;
}
last[nv2(a[i],a[i-1])]=i;
if(i==C)
{
cout<<a[C]<<endl;
break;
}
}
}
}
|