IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 洛谷P1011车站 -> 正文阅读

[数据结构与算法]洛谷P1011车站

题目描述

火车从始发站(称为第 1 站)开出,在始发站上车的人数为 a,然后到达第 2 站,在第 2 站有人上、下车,但上、下车的人数相同,因此在第 2 站开出时(即在到达第 3 站之前)车上的人数保持为 a 人。从第 3 站起(包括第 3 站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第(n?1) 站),都满足此规律。现给出的条件是:共有 n 个车站,始发站上车的人数为 a ,最后一站下车的人数是 m(全部下车)。试问 x 站开出时车上的人数是多少?

输入格式

输入只有一行四个整数,分别表示始发站上车人数 a,车站数 n,终点站下车人数 m 和所求的站点编号 x。

输出格式

输出一行一个整数表示答案:从 x 站开出时车上的人数。

输入输出样例

输入

5 7 32 4

输出

13

说明/提示

对于全部的测试点,保证1≤a≤20,1≤x≤n≤20,1≤m≤2×104。

来看一下这道题目 , 火车从开车开始没有人,第一次上车a人,下车0人 。第二次上车人数未知,这里假设人数为b ,则上车人数是b人,下车人数也是b人 , 第三次上车人数是a + b人,下车人数是b人。这里就不过多进行文字描述了,列个表格来看一下大概的情况吧

当走到最后一站的时候,车上所有的人都下车。以题目给的例子为例,最后一站下车的人数为32人,总共有7站,所以总共有6站满足我们现在需要找到的规律。

首先,从第四个开始,车上人数中,a的系数为前两次车上人数a的和然后-1

b的系数为前两次上车人数的和然后+1

那么知道最后一站的前一站 (第n - 1站) ,也就是最后一站下车的人数,所以可以推出b的计算公式

m = b * sum2[n - 1] + a * sum1[n - 1]

这样可以算出b =??(m - a * sum1[n - 1]) / sum2[n - 1]

现在我们是要求第x站车上人的个数, 所以依然可以用以上关于m的公式。

现在开始coding吧

	int a, b,n, x, m;
	sum1[1] = 1, sum1[2] = 1, sum1[3] = 2;
	cin >> a >> n >> m >> x;

读入数据,sum1是a的系数,sum2是b的系数,通过刚才的公式,可以计算下车之前,车上的人数,所以应该使用一下的递推

	for (int i = 4; i <= n - 1; i++) {
		sum1[i] = sum1[i - 1] + sum1[i - 2] - 1;
		sum2[i] = sum2[i - 1] + sum2[i - 2] + 1;
	}

最后用以上的公式推出b的答案,并且求得第x站时车上的人数。

将代码附在下面,有需要可以复制粘贴

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100;
int sum1[N], sum2[N];
//sum1为a的系数
//sum2为b的系数
int main() {
	int a, b,n, x, m;
	sum1[1] = 1, sum1[2] = 1, sum1[3] = 2;
	cin >> a >> n >> m >> x;
	for (int i = 4; i <= n - 1; i++) {
		sum1[i] = sum1[i - 1] + sum1[i - 2] - 1;
		sum2[i] = sum2[i - 1] + sum2[i - 2] + 1;
	}
	b = (m - a * sum1[n - 1]) / sum2[n - 1];
	cout << a * sum1[x] + b * sum2[x];
	return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:39:00  更:2022-05-11 16:40:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:53:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码