hdu(三)The Oculus(自然溢出,Fibonacci表示)
HDU6768 The Oculus
题意:已知任意的数字可以分成斐波那契的序列,好烦我不想讲题意了,比赛时候好像看错了。现在让你找一位错误位。给定两个正确的Fibonacci数列
A
、
B
A、B
A、B,计算出
A
∗
B
A*B
A∗B的Fibonacci数列后,在里面选一位1改成0。问现在是哪一位错了。
思路:
假设答案为
k
k
k,那么就有
A
∗
B
=
C
+
F
k
A*B=C+F_k
A∗B=C+Fk。
愁死了吧?哈哈哈自然溢出就算mod了哥们^^
所以现在你只需要随意开个数组,因为序列长度规模是
1
0
6
10^6
106所以数组开的下。也不用mod了直接加就可以,现在只要遍历找到
=
A
∗
B
−
C
=A*B-C
=A∗B−C的Fibonacci的下标并且输出就好。
LL f[maxn];
LL rin(int n) {
int tt;
LL ans = 0;
for (int i = 1; i <= n; i++) {
sci(tt);
if (tt)ans += f[i];
}
return ans;
}
int main() {
f[1] = 1;
f[2] = 2;
for (int i = 3; i < maxn; i++) {
f[i] = f[i - 1] + f[i - 2];
}
int t;
sci(t);
LL A, B, C;
while (t--)
{
int n;
sci(n);
A = rin(n);
sci(n);
B = rin(n);
sci(n);
C = rin(n);
A *= B;
A -= C;
for (int i = 1; i <maxn; i++) {
if (A == f[i]) {
cout << i << endl; break;
}
}
}
return 0;
}