1126は、シーケンスのN番目の項目(51 nod)をデリバリーすることを求める。
4534 ワード
ソースリンクhttp://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126
この問題はまず彼の周期を求めるべきです。。。。
この問題はまず彼の周期を求めるべきです。。。。
for(i=3;i<300;i++)
{
f[i]=((A*f[i-1]+B*f[i-2])%7+7)%7;
if(f[i-1]==1&&f[i]==1)
break;
} f[i-1]==1&&f[i]==1 , i-2
ここではn%( i-2)==0の場合に注意します。f[0]=f[i-2]で、n=i-2です。#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=1000;
int f[maxn];
int main()
{
int A,B,n;
while(scanf("%d %d %d",&A,&B,&n)!=EOF)
{
memset(f,0,sizeof(f));
if(n==1||n==2)
{
printf("1
");
continue;
}
f[1]=1;f[2]=1;
int i;
for(i=3;i<300;i++)
{
f[i]=((A*f[i-1]+B*f[i-2])%7+7)%7;
if(f[i-1]==1&&f[i]==1)
break;
}
f[0]=f[i-2];
printf("%d
",f[n%(i-2)]);
}
return 0;
}