1458: 移动距离(暴力模拟)

本文介绍了一个基于暴力模拟算法解决的楼号间距问题,具体地,对于X星球上以特定规律排列的居民楼,当给定两个楼号时,如何计算它们之间的最短移动距离。文章详细展示了算法实现过程,包括楼号分配、位置确定及距离计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:

1  2  3  4  5  6
12 11 10 9  8  7
13 14 15 .....

我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输入为3个整数w m n,空格分开,都在1到10000范围内
w为排号宽度,m,n为待计算的楼号。
要求输出一个整数,表示m n 两楼间最短移动距离。

 

样例输入

6 8 2

 

样例输出

4

思路:可以去推公式求解,我写的是暴力模拟,很难受,开大了数组,运行错误1分也没得到,也给自己个警醒吧

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int a[10005][105];
int b[2][2];
int main()
{
     int s=1;
     int w,m,n;
     cin>>w>>m>>n;
     int ss=0;
     for(int t=1;t<=10000;t++)
     {
     	if(t%2==1)
     	{
     		for(int j=1;j<=w;j++)
     		{
     		 
     		 a[t][j]=s;
			 s++;	
     		 if(a[t][j]==m||a[t][j]==n)
     		 {
     		 	b[ss][0]=t;
     		 	b[ss][1]=j;
     		 	ss++;
     
			 }
			}
		}
		else
		{
			for(int j=w;j>=1;j--)
			{
				
			   a[t][j]=s;
			   s++;
			if(a[t][j]==m||a[t][j]==n)
     		 {
     		 	b[ss][0]=t;
     		 	b[ss][1]=j;
     		 	 
     		 	ss++;
			 }
			}
		}
		if(ss==2)
		{
			break;
		}
	 }
	 
	 printf("%d",abs(b[0][0]-b[1][0])+abs(b[0][1]-b[1][1]));
	return 0;
} 

 

转载于:https://www.cnblogs.com/Staceyacm/p/10781805.html

结合我的代码,给出该题小蓝找到了一个外星文明留下来的遗迹,遗迹大门的屏幕上有一个长度为m 的字符串 t 和一个输入框,下面还有一个键盘,键盘为一个长度为 n 的字符串 s ,由一个可以横向移动的指针来敲击键盘,指针可以向左移或向右移,不能移出键盘。 小蓝需要在键盘字符串 s 上先指定指针初始位置然后不断移动指针的位置,过程中通过敲击指针所在的字符来进行输入。然而,指针最多只能移动 L 的距离,小蓝想输入一个尽可能长的一个 t 的前缀,请问他最多能输入多少位。 输入格式 输入的第一行包含三个正整数 n, m, L ,相邻整数之间使用一个空格分隔。 第二行包含一个长度为 n 的字符串 s 。 第三行包含一个长度为 m 的字符串 t 。 输出格式 输出一行包含一个整数表示答案。 样例输入 3 6 5 abc acbbac 样例输出 5 提示 【样例说明】 初始选择指针位于键盘 abc 上的 a ,输入 acbbac 这 6 个字符分别需要指针移动 0, 2, 1, 0, 1, 2距离,而最大移动距离为 5 ,所以最多输入 5 个字符,移动 0 + 2 + 1 + 0 + 1 = 4 的距离。 【评测用例规模与约定】 对于 20% 的评测用例,1 ≤ m ≤ 20; 对于所有评测用例,1 ≤ n ≤ 103 ,1 ≤ m ≤ 105 ,1 ≤ L ≤ 109 且 s, t 中只包含小写字母,且 s 中一定包含所有 t 中出现过的字母,数据保证随机。暴力解法
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值