咋一看没切入点, 然后就崩了。
k 的大小决定了此题不能枚举。
转化成其他相同形式很关键!!
(n^2-n*m-m^2)^2 = ( -(m+n)^2 + 2n^2 + m*n)^2 = ((m+n)^2 - (n+m)*n + n^2)^2
发现 n 等价与 n + m
m 等价于 n
也就是斐波那契数列都满足于此式
而且m, n 为相邻的斐波那契数
所以找最接近k的两个就行了= =
观察和转化很重要!!!
代码如下
#include <cstdio>
#define max(a,b) a>b?a:b
int dp[1000001];
int main(){
int i, j, k;
scanf("%d", &k);
dp[0] = dp[1] = 1;
for(i = 2; i <= 1000001; i++){
dp[i] = dp[i-1] + dp[i-2];
if(dp[i] > k){
printf("m=%d\nn=%d\n", dp[i-2], dp[i-1]);
return 0;
}
}
return 0;
}