当前位置:   article > 正文

蓝桥杯 试题 算法训练 数组移动_给定一个n个数的数组,m次操作。每次操作将数组的一段翻转,求最后的数组。(提示:可

给定一个n个数的数组,m次操作。每次操作将数组的一段翻转,求最后的数组。(提示:可

问题描述

初始数组A[N]中为1,2,…,N,N个数字,现要进行M次操作,每次操作给定一个数字i,记其在数组中的位置为Bi,将A[1]…A[Bi]移到数组末尾。
输入格式
  输入的第一行包含两个整数N,M。接下来M行,每行一个正整数,表示给定的数字i。
输出格式
  一行,输出M次操作后的A数组。

样例输入

5 2
3
2

样例输出

3 4 5 1 2

样例说明

第一次操作后变为 4 5 1 2 3

第二次操作后变为 3 4 5 1 2

数据规模和约定

N<=105,M<=105

这个题用链表确实简单,不过我感觉用数组更简单。其实,这个题非常简单,数组元素之间的前趋后继关系是确定的,这就决定了,数组中的某个元素,不论它经历了多少次移动,它的前后元素是确定的。
就用样例来看,先把3调到队尾,再把2调到对位,实际上跟直接把2调到队位是一样的,这样想来这个题就简单多了

#include <iostream>
#include <cmath>
using namespace std;

int main() {
	int n,m;
	int temp;
	cin >> n >> m;
	int* arr = new int[n];
	for (int i = 0; i < n; i++)
		arr[i] = i + 1;
	for (int i = 0; i < m; i++) 
		cin >> temp;		
	

	for (int i = temp; i < n; i++)
		cout << arr[i] << " ";
	for (int i = 0; i < temp; i++)
		cout << arr[i] << " ";

	cout << endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

事实证明,多动脑思考是好的,hh

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/670182
推荐阅读
相关标签
  

闽ICP备14008679号