FIBVAL - VOI 2012 Bản vanxơ Fibonacci

Tác giả: flashmt

Ngôn ngữ: C++

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

int f[20]={0,1,2};

int cyclic(int u,int v)
{
	int l=v-u+1;
	for (int x=1;x<=l/2;x++)
		if (l%x==0)
		{
			int ok=1;
			for (int i=u+x;i<=v;i++)
				if (f[i%16]!=f[(i-x)%16]) 
				{
					ok=0; break;
				}
			if (ok) return 1;
		}
	return 0;
}

int calc(int u,int v)
{
	int res=-1;
	if (v-u+1<=100)
	{
		for (int i=u;i<v;i++)
			for (int j=i+1;j<=v;j++)
				if (cyclic(i,j)) 
					res=max(res,j-i+1);
	}
	else res=(v-u+1)/16*16;
	return res;
}

int main()
{
	int test,u,v;
	for (int i=3;i<=16;i++) f[i%16]=(f[i-1]+f[i-2])%7;
	
	cin >> test;
	while (test--) cin >> u >> v, cout << calc(u,v) << endl;
}

Download