https://www.luogu.org/problemnew/show/P1936
这道题自己没有想出好的解决方法,一直对着公式死推,最后只推出来n-2m<0这一个约束条件抱着侥幸的心态提交了一下TLE。看了排名前几的解题报告,觉得自己要培养
模拟+找规律的思维。
思路分析:先暴力计算出K=1~15的结果
1 m=1 n=1
2 m=1 n=1
3 m=2 n=3
4 m=2 n=3
5 m=3 n=5
6 m=3 n=5
7 m=3 n=5
8 m=5 n=8
9 m=5 n=8
10 m=5 n=8
11 m=5 n=8
12 m=5 n=8
13 m=8 n=13
14 m=8 n=13
15 m=8 n=13
可以发现n,m都在斐波那契数列中,n是m的后一个数,而且继续算下去会发现m即该组答案出现的次数。
ps:有dalao根据式子推出了规律,做个搬运工
记f(n,m)=(n^2- mn - m^2) ^2
则有f(m+n,m)=[(m+n)^2- n(m+n)- n^2] ^2=(m ^2 +mn-n^2) ^2=(n ^2-mn- m^2) ^2 =f(n,m)
代码:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int k;
cin>>k;
int a=1,b=1,c;
int cnt=1;
while(1)
{
cnt+=b;
if(cnt>=k)
{
cout<<"m="<<b<<endl;
cout<<"n="<<c<<endl;
break;
}
else
{
c=a+b;
a=b;
b=c;
c=a+b;
}
}
return 0;
}
网友评论