洛谷1775 古代人的难题_NOI导刊2010提高(02)
本题地址: http://www.luogu.org/problem/show?pid=1775
题目描述
门打开了,里面果然是个很大的厅堂。但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有。难道这就是王室的遗产?小FF不信,他仔细阅读了羊皮纸上的内容后发现,里面书写的古代人一直没能解出的难题,解除这道题目的人只要将答案用石笔写到这张羊皮纸上就能到达王室的宝藏室了。而当小FF拿起石笔后,刚刚打开的巨石门突然关上了;这时小FF意识到原来那几具骷髅是在他之前到这里的冒险者,恐怕是因为没能破解这道题而困死在这里了。小FF越想越害怕,急忙联系到了你,为了能保命,他甚至愿意和你五五分……看来你不得不再次帮他了。羊皮纸上的问题如下:已知x,y为整数,且满足以下两个条件:
1.x,y∈[1…k],且x,y,k∈Z
2.(x^2-xy-y^2)^2=1
给你一个整数k,求一组满足上述条件的x,y并且使得x^2+y^2的值最大。
小FF得到答案后,用石笔将答案书写在羊皮纸上,那么就能到达王室的遗产所在地了。
输入输出格式
输入格式:
输出文件仅一行,两个整数;两个整数分别表示x和y。x,y之间用一个空格隔开。
输出格式:
一个整数k
输入输出样例
输入样例#1:
1995
输出样例#1:
1597 987
说明
对于30%的数据:2≤k≤10^4。
对于100%的数据:2≤k≤10^18。
【思路】
Fibonacci。
这个题启发我们如果看到题目没有思路可以考虑先用暴力的方法打几个点找一下规律。这个题目递推规则与Fibonacci同,首项为1,第二项为2。直接推如果超过n则停止。
另外一定注意数据范围。
【代码】
1 #include<iostream> 2 using namespace std; 3 4 typedef unsigned long long LL; 5 6 int main() { 7 LL n; cin>>n; 8 LL F1=1,F2=2,F3=3; 9 while(F3<n) { 10 F3=F1+F2; 11 if(F3>n) break; 12 F1=F2; 13 F2=F3; 14 } 15 cout<<F2<<" "<<F1; 16 return 0; 17 }