序列翻转
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
小明有一个长度为n的整数序列,上课的时候小明睡着了,老师就让他去外面罚站,小明于是就玩了起来,老师就更气,老师就让小明把长度为n的序列翻转之后再依次往后移动m个位置,当超过n时从1开始,如果小明算数不出来就让他站一天,小明不想站一天,你可以帮他解决这个问题吗?
输入输出格式
输入描述:
第一行输入两个正整数n(2<n<1e6),m(1<m<1e18),然后第二行输入n个小于1e9的正整数
输出描述:
输出一行表示经过变换后的序列
输入输出样例
输入样例#:
10 2 1 2 3 4 5 6 7 8 9 10
输出样例#:
2 1 10 9 8 7 6 5 4 3
提示
温馨提示:m的值可能比n大很多。
解题方法
思路
利用vector插入和删除函数
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,m;
while(cin>>n>>m){
vector<int> v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
reverse(v.begin(),v.end());
while(m--){
int x = v[n-1];
v.insert(v.begin(),x);
v.erase(v.end()-1);
}
for(int i=0;i<n;i++){
cout<<v[i]<<" ";
}
}
return 0;
}