首先我要说明,此题(古代人的难题)与水晶灯火灵是一模一样的!

古代人的难题

(File IO): input:puzzle.in output:puzzle.out

时间限制: 1000 ms  空间限制: 60000 KB  具体限制

Time to Submit: 01:57:40

题目描述

门打开了, 里面果然是个很大的厅堂。但可惜厅堂内除了中央的一张羊皮纸和一根精致的石笔,还有周围几具骷髅外什么也没有。 难道这就是王室的遗产? 小 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 的值最大。

当小 F 得到答案后, 用石笔将答案书写在羊皮纸上,那么就能到达王室的遗产所在地了。

输入

一个整数 k

输出

输出文件仅一行,两个整数;

两个整数分别表示 x 和 y。x, y 之间用一个空格隔开。

样例输入

1995

样例输出

1597 987

数据范围限制

对于 30%的数据: 2<=k<=10^4.

对于 100%的数据: 2<=k<=10^18.

提示

Z是数学里面整数集合符号,  即x y k都是整数

Solution(P1775&P1936)

悄悄地打个表(其实就是在暴力枚举模拟的过程)

table_code

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. unsigned long long k;
  4. int main()
  5. {
  6. freopen("table.txt","w",stdout);
  7. // cin>>k;
  8. int maxans=,maxx=,maxy=;
  9. for(k=;k<=;k++)
  10. {
  11.  
  12. for(int x=;x<=k;x++)
  13. for(int y=;y<=x;y++)
  14. {
  15. if((x+y)*(x-y)==x*y+||(x+y)*(x-y)==x*y-)
  16. if(maxans<x*x+y*y)
  17. {
  18. maxans=max(maxans,x*x+y*y);
  19. maxx=x;
  20. maxy=y;
  21. }
  22. }
  23. cout<<k<<" "<<maxx<<" "<<maxy<<endl;}
  24. return ;
  25. }

table.txt

  1. k x y

table.txt

哈,这不是熟悉的斐波那契数列兄弟嘛

那么问题就变成了:

已知k,求x,y。

其中x,y属于斐波那契数列相邻了两项且x>y(P1936 水晶灯火灵 中是m<n)

使得k>=x&&k<x+y

//文末有证明!

Code(P1775)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. unsigned long long k;
  4. void make()
  5. {
  6. int i=;
  7. unsigned long long x=,y=,t,l=,r;
  8. while(true)
  9. {
  10. t=x;
  11. x=x+y;
  12. y=t;
  13. if(k>=x&&k<x+y)
  14. {
  15. cout<<x<<" "<<y;
  16. return;
  17. }
  18. }
  19. return;
  20. }
  21. int main()
  22. {
  23. // freopen("puzzle.in","r",stdin);
  24. // freopen("puzzle.out","w",stdout);
  25. cin>>k;
  26. make();
  27. return ;
  28. }
  29. /*
  30. 1. x, y sy [1..k], 且x,y,k sy Z;
  31. 2. (x^2 - xy - y^2)^2 = 1
  32. 给你一个整数 k,
  33. 求一组满足上述条件的 x, y
  34. 并且使得 x^2 + y^2 的值最大。
  35.  
  36. */

也可以利用打的表(修改了一下)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. unsigned long long k;
  4. unsigned long long table[]={
  5. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
  6. ,,,,,,,,,,,,,,,
  7. ,,,,,,,,,,,,
  8. ,,,,,,,,,,
  9. ,,,,,,,,,
  10. ,,,,,,,,
  11. ,,};
  12. int main()
  13. {
  14. // freopen("puzzle.in","r",stdin);
  15. // freopen("puzzle.out","w",stdout);
  16. cin>>k;
  17. for(int i=;i<=;i++)
  18. if(k>=table[i]&&k<table[i+])
  19. {
  20. cout<<table[i]<<" "<<table[i-];
  21. break;
  22. }
  23. return ;
  24. }

但是请注意,上面这种方法请在 工具 -> 编译选项 -> 代码生成/优化 -> 代码警告 中把“忽略所有警告信息” 设为“Yes”

Code(P1936)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. unsigned long long k;
  4. void make()
  5. {
  6. int i=;
  7. unsigned long long x=,y=,t,l=,r;
  8. while(x<k*)
  9. {
  10. t=x;
  11. x=x+y;
  12. y=t;
  13. if(k>=x&&k<x+y)
  14. {
  15. cout<<"m="<<y<<endl<<"n="<<x;
  16. return;
  17. }
  18. }
  19. return;
  20. }
  21. int main()
  22. {
  23. cin>>k;
  24. make();
  25. return ;
  26. }
  27. /*
  28. 1. x, y sy [1..k], 且x,y,k sy Z;
  29. 2. (x^2 - xy - y^2)^2 = 1
  30. 给你一个整数 k,
  31. 求一组满足上述条件的 x, y
  32. 并且使得 x^2 + y^2 的值最大。
  33.  
  34. */

证明

本文提供两种证明方法。敬请过目~

证明(P1775)

(x^2 - xy - y^2)^2

= (y^2 + xy - x^2)^2

= [(x+y)^2 - xy - 2*x^2]^2

=[(x+y)^2 - (x+y)*x - x^2]^2

由上式可知, 如果x, y 满足条件2, 那么x+y, y 也满足条件2。

那么Fibomacci 中小于等于k 的最大两个相邻的数即为试题所需的解。

证明(P1936)

记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)

易得f(1,1)=1

故1=f(1,1)=f(2,1)=f(3,2)=...

洛谷P1936 水晶灯火灵 P1775 古代人的难题_NOI导刊2010提高(02)【重题请做P1936】的更多相关文章

  1. 洛谷——P1775 古代人的难题_NOI导刊2010提高(02)&& P1936 水晶灯火灵(斐波那契数列)

    P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵 斐波那契数列 1.x,y∈[1…k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满 ...

  2. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)

    P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...

  3. luogu P1775 古代人的难题_NOI导刊2010提高(02)(斐波纳契+数学)

    题意 已知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的值最大. ...

  4. 洛谷P1774 最接近神的人_NOI导刊2010提高(02) [2017年6月计划 线段树03]

    P1774 最接近神的人_NOI导刊2010提高(02) 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门 ...

  5. 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)

    To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的 ...

  6. 洛谷 P1774 最接近神的人_NOI导刊2010提高(02)

    题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...

  7. 洛谷——P1774 最接近神的人_NOI导刊2010提高(02)

    https://www.luogu.org/problem/show?pid=1774 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古 ...

  8. 洛谷P1776 宝物筛选_NOI导刊2010提高(02)(多重背包,单调队列)

    为了学习单调队列优化DP奔向了此题... 基础的多重背包就不展开了.设\(f_{i,j}\)为选前\(i\)个物品,重量不超过\(j\)的最大价值,\(w\)为重量,\(v\)为价值(蒟蒻有强迫症,特 ...

  9. 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)

    [题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...

随机推荐

  1. Codeforces 1117C Magic Ship (二分)

    题意: 船在一个坐标,目的地在一个坐标,每天会有一个风向将船刮一个单位,船也可以移动一个单位或不动,问最少几天可以到目的地 思路: 二分天数,对于第k天 可以分解成船先被吹了k天,到达坐标(x1+su ...

  2. EMC NW disaster and recovery simulation 1

    终于可以模拟成功了虽然只是个实验但是很有借鉴意义. 前期的准备就不说了都懂直接上图吧 scanner -B networker_indexclone to find out the laster bo ...

  3. 二、Mongodb常用命令

    #进入admin数据库 use admin #进行权限认证 db.auth('userAdmin', '123456') #查询所有用户 db.system.users.find() #更新用户 db ...

  4. Shiro过滤器

    Shiro内置过滤器 anon.authBasic.authc.user.logout perms.roles.ssl.port spring.xml <bean id="shiroF ...

  5. 【题解】P3373 【模板】线段树 2

    线段树解法 好丢脸,这个题做了一下午,调试了三个多小时...... 先讲讲解题思路 既然这里是线段树,就要用到lazy-tag.又有加法又有乘法的话,就要用到两个lazy-tag,分别用数组jia[] ...

  6. Linux学习1-云服务器上搭建禅道项目管理工具

    前言 相信各位测试的小伙伴出去面试总会被问到:测试环境怎么搭建?一个中级测试工程师还是对测试环境一无所知的话,面试官会一脸鄙视的,今天我给大家介绍一下最简单的环境部署-—如何在云服务器部署禅道环境. ...

  7. Git 分支设计规范

    概述 这篇文章分享 Git 分支设计规范,目的是提供给研发人员做参考. 规范是死的,人是活的,希望自己定的规范,不要被打脸. 在说 Git 分支规范之前,先说下在系统开发过程中常用的环境. 简称 全称 ...

  8. C++括号匹配检测(用栈)

    输入一串括号,包括圆括号和方括号,()[],判断是否匹配,即([]())或[([][])]为匹配的正确的格式,[(])或([())为不匹配的格式. #include<iostream> # ...

  9. 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  10. 常见Bash命令操作

    常见Bash命令操作 查看当前目录 pwd 查看目录下的文件 ls 进入某个目录 cd 返回上一级目录 cd .. 创建一个目录 mkdir abc 创建一个文件 touch a.html 保存文件退 ...