问题描述
初始数组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;
}
事实证明,多动脑思考是好的,hh