青蛙

青蛙的约会(信息学奥赛一本通 1631)(洛谷 1516)

自作多情 提交于 2019-11-28 12:39:28
题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 输入格式 输入只包括一行5个整数x,y,m,n,L 其中0<x≠y < =2000000000,0 < m、n < =2000000000,0 < L < =2100000000。 输出格式 输出碰面所需要的天数,如果永远不可能碰面则输出一行"Impossible"。 输入输出样例 输入 #1 1 2 3 4 5 输出 #1 4 这道题呢就是很显然的 拓展欧几里得算法的应用 。

剑指offer8:青蛙跳台阶

懵懂的女人 提交于 2019-11-28 12:27:31
1. 题目描述   一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 2. 思路和方法    青蛙每一次跳跃只有两种选择:一是再跳1级阶梯到达第n级阶梯,此时小青蛙处于第n-1级阶梯;或者再跳2级阶梯到达第n级阶梯,此时小青蛙处于n-2级阶梯 。于是,n级阶梯的跳法总是依赖于前n-1级阶梯的跳法总数f(n-1)和前n-2级阶梯的跳法总数f(n-2)。因为只有两种可能性,所以,f(n)=f(n-1)+f(n-2);   递推公式f(n)=f(n-1)+f(n-2):很熟悉,就是斐波那契数列求和验证一下,青蛙1级有1种跳法,2级有2种跳法,3级有3种跳法,4级有5种跳法。 3. C++核心代码 3.1 递归(效率低,时间复杂度O(n 2 )) 1 class Solution { 2 public: 3 int jumpFloor(int number) { 4 if(number==1) 5 return 1; 6 else if(number==2) 7 return 2; 8 else{ 9 return jumpFloor(number-1)+jumpFloor(number-2); 10 } 11 } 12 }; View Code 3.2 非递归(时间复杂度O(n)) 1 class Solution {

洛谷 P1244 青蛙过河

会有一股神秘感。 提交于 2019-11-28 00:51:12
洛谷 P1244 青蛙过河 链接 https://www.luogu.org/problem/P1244 题目 题目描述 有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示。n只青蛙要过河(从左岸石墩A到右岸石墩B),规则为: (1)石墩上可以承受任意多只青蛙,荷叶只能承受一只青蛙(不论大小); (2)青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,D→B,D→C,C→D; (3)当一个石墩上有多只青蛙时,则上面的青蛙只能跳到比它大1号的青蛙上面。 你的任务是对于给出的h,k,计算并输出最多能有多少只青蛙可以根据以上规则顺利过河? 输入格式 两个整数h,k 输出格式 一个整数,表示最多能有多少只青蛙可以根据以上规则顺利过河。 输入输出样例 输入 #1 2 3 输出 #1 16 思路 这道题超出了我的想象。。。。。我没怎么看懂,之后看了别人的博客才搞明白,按道理说用动态规划,但是化简之后的式子就是直接h,k组成的,如果没有石墩,那么只有k+1个,每有一个石墩,数量就增加为(k+1)*2^h,就是每多一个石墩就多了一次周转的机会,然后输出结果就行了。 代码 #include<iostream> using namespace std; int main() {

数学问题

拜拜、爱过 提交于 2019-11-27 22:57:43
Problem1数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的。 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法。 输入 输入仅一行,即N,K(N<=200,K<=20) 输出 输出仅一个数,即总共的方法数 Problem2最优分解方案 题目描述 给定整数N,将其分解为若干个互不相同的整数,是他们的乘积最大 输入 输入仅一个数,N(N<=1000) 输出 输出最大乘积 Problem3出栈序列统计 题目描述 栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列.你已经知道栈的操作有两·种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出.现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列.请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数. 输入 输入一个整数n(1<=n<=50) 输出 输出一个整数,即可能输出序列的总数目。 Problem4百事世界杯之旅 题目描述 每个瓶盖上有一个球星的名字,有N个不同的球星,平均情况下,要买多少瓶饮料才能集齐所有名字 输入 输入一个数N(<=33) 输出 输出平均情况下的瓶数,若为整数则直接输出,若为分数,则以真分数形式输出,格式如下: b

青蛙的约会

允我心安 提交于 2019-11-27 13:35:21
青 蛙 原题: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 0<x≠y < =2000000000,0 < m、n < =2000000000,0 < L < =2100000000。 经典exgcd 令所用时间t,根据题意可以列出下式: x+mt=y+nt 然后解得t=(x-y)/(n-m) 把圆看成无限长是不对的,因为圆可以从后面追上but无限长的直线不可 于是再令二者相差圈数位k,得到: x+mt=y+nt+lk 变形 (n-m)t+lk=x-y

POJ-1061 青蛙的约会

不想你离开。 提交于 2019-11-27 10:49:51
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 Input 输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。 Output 输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible" Sample Input 1 2 3 4 5 Sample Output 4思路:扩展欧几里得由题意可得式子:x+m*k=y+n*k mod L

剑指offer-3:跳阶梯

两盒软妹~` 提交于 2019-11-27 09:27:59
三、跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 分析 青蛙每一次跳跃只有两种选择:一是再跳1级阶梯到达第n级阶梯,此时小青蛙处于第n-1级阶梯;或者再跳2级阶梯到达第n级阶梯,此时小青蛙处于n-2级阶梯。于是,n级阶梯的跳法总是依赖于前n-1级阶梯的跳法总数f(n-1)和前n-2级阶梯的跳法总数f(n-2).因为只有两种可能性,所以,f(n)=f(n-1)+f(n-2); 递推公式f(n)=f(n-1)+f(n-2):很熟悉,就是斐波那契数列求和 验证一下,青蛙1级有1种跳法,2级有2种跳法,3级有3种跳法,4级有5种跳法.... 解答 https://www.cnblogs.com/JimShi/p/11352408.html 来源: https://www.cnblogs.com/JimShi/p/11355922.html

例题1 青蛙的约会

爷,独闯天下 提交于 2019-11-27 08:40:23
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 Input 输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。 Output 输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible" Sample Input 1 2 3 4 5 Sample Output 4题解: 这是一个用拓展欧几里得算法解决线性不定方程的例题即 ax

[NOIP模拟测试]:Blue(贪心)

好久不见. 提交于 2019-11-26 23:42:26
题目描述 $Blue$是个动物学家,不仅喜欢研究猫和老鼠,还喜欢研究青蛙。 他最近开始研究青蛙过河的问题,可以简化成:数轴上$0$为岸边,$L$为河对岸。$(0,L)$中间存在$n$个石子。已知青蛙一跳可以跳距离$D$,而且不能沾水。求问能不能跳到河对岸。当然他觉得这个问题非常$naïve$,于是在思考如果青蛙有$m$个,且石头被踩过之后就会沉下去,$m$个青蛙还能不能依次安全过河。如果不能则问最多能有多少个过河。 输入格式 输入第一行为一个正整数$T$代表数据组数。每组数据第一行四个正整数:$n$、$m$、$D$、$L$。 第二行$n$个升序正整数$a_i$代表第$i$个石子坐标为$a_i$。保证没有重复且都小于$L$。 输出格式 输出$T$行$"Excited"$代表全部能过河或者一个整数代表有多少个能过河的。 样例 样例输入: 5 10 9 16 30 2 4 6 9 11 15 18 19 25 27 10 1 23 30 10 11 13 14 15 16 18 26 27 29 10 7 28 30 2 3 7 9 12 15 20 24 27 28 10 3 18 30 1 6 9 14 18 19 22 27 28 29 10 7 10 30 1 2 4 6 18 19 20 22 23 26 样例输出: 5 Excited Excited Excited 0

NOIP模拟 16

三世轮回 提交于 2019-11-26 20:35:10
  嗯我已经是个不折不扣的大辣鸡了      上次的T3就弃了,这次又弃   颓废到天际   T1 巨贪 贪心算法     我就是一个只会背板子的大辣鸡      全裸的 贪心看不出来,只会打板子     打板子,加特判,然后一无进展,原题不会,这就是我的辣鸡状态     考试我就一辣鸡。改题贼jier慢。但收获还可以。     一开始打了一个 真*单调队列      TM真是板子,一点都没变通     然后WA60调到无力,最后还是天皇提醒了一下才发现缺陷     (我TM有多少错是天皇帮调的?考试辣鸡能怪别人?)(我没脸了)     缺陷是在队列里乱pop的时候,可能把前方青蛙不用的石头扔了然后后边用不了     然后发现不可改..     参考别人的做法,发现大多数的过程是 枚举每个点开头的长度为D的区间,区间内石头数量的min值就是答案     这很神仙..我尝试证明并获得失败     然后感谢KX哥救我狗命,给了我一个比较好理解的算法     因为要让每个青蛙跳到尽量远的地方,而他们之间可能并不连续(隔着一些石头)不好处理     那干脆把青蛙塞进队里,枚举每个石头,让他被最远的青蛙跳到,这个策略是一样的     虽然在初始的策略中,我们是让前边的青蛙先跳,后边的淘汰,枚举石头则好像让后边的先跳     但是显然后者具有决策包容性。当两个青蛙争夺一个石头的时候