【牛客网】bfs广度搜索

网易笔试编程-饥饿的小易 题目描述: 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,01 阅读详情

题目描述

小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等)。小易需要你帮忙计算最少需要使用多少次神秘力量就能吃到贝壳。

输入描述:

输入一个初始位置x_0,范围在1到1,000,000,006

输出描述:

输出小易最少需要使用神秘力量的次数,如果使用次数使用完还没找到贝壳,则输出-1
示例1

输入

125000000

输出

1
set.find(x)如果x在集合中将返回x所在位置,若不存在,等于set.end()
两种方式,广度搜索,选取最优
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;
#define M 1000000007
queue<long int>q;//保存x的1模值 
map<long int,int>m;//x的模值,移动次数
int result(long int x){
	if(x>=1&&x<=1000000006){
	q.push(x%M);
	m[x%M]=0;
	while(!q.empty()){
		long int now=q.front();
		q.pop();
		if(now==0)
		return m[now];
		if(m[now]<100000){
			long int x1=(4*now+3)%M;
			if(m.find(x1)==m.end()){//说明x1不在集合中
			q.push(x1);
			m[x1]=m[now] +1;
			}
			long int x2=(8*now+7)%M;
			if(m.find(x2)==m.end()){
				m[x2]=m[now]+1;
				q.push(x2);
			}
		}
	  }	
	}
	return -1;
}
int main(){
	long int x;
	cin>>x; 
    cout<<result(x)<<endl;
	return 0;
} 


饥饿的小易 取模运算 参考:https://blog.csdn.net/waltonhuang/article/details/52143201 链接:https://www.nowcoder.com/questionTerminal/5ee8df898312465a95553d82ad8898c3 来源:牛客网 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0... 阅读详情

相关推荐

网易校招真题——饥饿的小易

牛客网编程题——饥饿的小易 题目描述 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,00...

BigSea 695

饥饿的小易(牛客网

分析题目,小易有一个初始位置x,从初始位置出发有两种途径,一个是4*x+3,一个是8*x+7,看到这种和数学有关的表达式,一定要先联系数学,我们令f(x)=4*x+3,g(x)=8*x+7; 我们可以发现,f(g(x))=g(f(x)),那么就是说先按哪种方式走都可以,然后,我们还可以观察到,f(x)执行3次就相当于g(x)执行两次,这个题目是要求小易最少的执...

sophie1314的博客 567

饥饿的小易(BFS问题)

1、原题: 题目描述 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位

iCoding91 2137

牛客网 2018校招真题 美团点评 重要节点

Description 牛客网 2018校招真题 重要节点 Solving Ideas BFS 创建一个标记数组arrive,arrive[i][j]为true表示从i可以到达j, false则不能 Solution import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader...

wylu 236

牛客网 wyh的矩阵(找规律)+wyh的迷宫(bfs)

【题目】 【分析】 一开始直接开始敲代码了果然超时了哭哭。仔细观察,头尾结合为中间的两倍。 以5为例,(5*5/2+1)为中心数13(我就是随便叫叫),答案为13*(1+3+5+3+1)=13*13. 有了答案为中心数平方的猜想,但是我们不能胡来嘛。个数推导一下为(1+n)/2*(1+n)/2*2-n=(n*n+1)/2. 因为n为奇数嘛,所以二者相等就可以直接写啦。短的一批,这...

菜鸡成长史 655

bfs 牛客 走出迷宫

牛客 走出迷宫 题目: 链接https://ac.nowcoder.com/acm/problem/14572 思路: 由题可知,是一个单源最短路,使用bfs搜索,从S点出发找到E点即可,用一个标志位判断是否找到。 代码: #include <bits/stdc++.h> using namespace std; const int maxn=505; int n,m; char a[maxn][maxn]; int ax[]= {0,0,1,-1},ay[]= {1,-1,0,0}; q

爪蛙毁一生的博客 263

F-Call to your teacher

链接:https://www.nowcoder.net/acm/contest/76/F来源:牛客网题目描述从实验室出来后,你忽然发现你居然把自己的电脑落在了实验室里,但是实验室的老师已经把大门锁上了。更糟的是,你没有那个老师的电话号码。你开始给你知道的所有人打电话,询问他们有没有老师的电话,如果没有,他们也会问自己的同学来询问电话号码。那么,你能联系到老师并且拿到电脑吗。输入描述:存在多组测试样...

s540239976的博客 501

牛客网:S老师的签到 ← BFS

BFS 有“分层”的核心思想,故在本题中以 x+y 相同的值作为“分层”的依据。即若从某位置开始,则位于同一层的是 x+y 的值相同的位置。其中,x 是向下走的距离,y 是向右走的距离。 ● C++11 标准中的 for 循环,用 auto 以简洁、统一的方式来遍历容器和数组。 ● 运算符 ^ 表示按位异或。

hnjzsyjyj的专栏 1069

java 二叉树的路径变形题

牛客题目链接 1. 题目考点 bfs 2. 考点解析 int sum = 0; public int sumNumbers (TreeNode root) { // write code here dfs(root, 0); return sum; } public void dfs(TreeNode root, int cnt) { if (root == null) return ; cnt =

白纸 107

牛客网刷题-求二叉树的层序遍历

问题描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 示例 示例1 输入 给定的二叉树是{3,9,20,#,#,15,7}, 输出 [ [3], [9,20], [15,7] ] 解决思路 思路 广度优先搜索【PS:借助队列】 二叉树的层级遍历可以通过广度优先搜索的方式实现,广度优先搜索可以借助队列实现。 代码实现 // 思路1:归并排序 public class Solution { public ArrayList<ArrayList<

qq_35398517的博客 241

1004 Counting Leaves (30 分)

判断树每层有多少个叶子节点 #include&lt;bits/stdc++.h&gt; using namespace std; const int maxn = 105; int max_h=1; int leaf[maxn]={0}; vector&lt;int&gt; G[maxn]; void DFS(int index, int h){ max_h = max(h, max_h); ...

姚军 340

算法题(四十):BFS解决网易2017年笔试题——地牢逃脱

题目描述 给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢。 输入描述: 每个输入...

qq_24034545的博客 338

1013 Battle Over Cities (25 分)

开始的时候题目理解错了 题目是要求剩下的城市连通,所以需要当前城市屏蔽,然后计算剩余城市的连通分量,求得的结果减去1就是答案 本题我使用的BFS处理 #include&lt;cstdio&gt; #include&lt;vector&gt; #include&lt;cstring&gt; #include&lt;queue&gt; #include&lt;algorithm&gt; using n...

姚军 355

【错题集-编程题】kotori 和迷宫(BFS / DFS)

没有设置好对不同字符的处理条件。

Elena's Blog 449

【算法合集】深搜广搜Prim与Kruskal

广度优先搜索BFS)又叫广搜,它像一个有远见的人,它是一层一层来实现搜索的,也挺像下楼梯的。 思路: 1.先初始化队列 q; 2.从起点开始访问,并且改变他的状态为已经访问; 3.如果他的队列非空,取出首个元素,将它弹出! 4.如果u == 目标状态,然后对所以与 u 邻近的点进入队列; 5.标记它已经被访问!...............

程序猿追的博客 2万+

hdu 1043/poj 1077八数码问题 BFS+康托展开求解

hdu1043求解

weixin_45720206的博客 203

【C++笔试强训】如何成为算法糕手Day5

这是一道简单的模拟题,我们要找出三个字符(y、o、u)中最少的那个字符的数量,这个数量n表示最多能组成多少个"you"。然后,我们计算o字符的总数减去n,得到剩余的o字符数量。如果剩余的o字符少于2个,那么就不需要进一步操作。如果剩余的o字符数量是2个或更多,我们可以在结果上加1(对于2个o),加2(对于3个o),以此类推。最终的结果是n加上剩余o字符数量减去1。

循环渐进学习编程,成长 979

BFS 相关题目

【代码】BFS 相关题目。

newboygogogo的博客 560
上一篇: 【牛客网】回文串
下一篇: 【斯特林公式】N!的k进制位数
idealistic
博客等级 码龄10年 97粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值