文章
5
粉丝
0
获赞
23
访问
696
#include<bits/stdc++.h>
using namespace std;
int main(){
int n=0,k=0;
while(cin>>n>>k){
int i=0;
vector<int>a(n);
vector<int>b;
for(i=0;i<n;i++){
a[i]=i+1;
}
for(i=0;i<k;i++){
int x=0,l=0;
cin>>x;
for(int j=x;j<n;j++){
b.push_back(a[j]);
}
for(int j=0;j<x;j++){
b.push_back(a[j]);
}
a=b;
if(a.size()%2==0)reverse(a.begin(),a.begin()+n/2);
else reverse(a.begin(),a.begin()+(n-1)/2);
}
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
}
登录后发布评论
b 向量未清空:在每次 shift 操作前,没有对 b 向量进行清空。这样会使得之前操作的元素一直保留在 b 里,进而引发结果错误。
reverse 操作的范围有误:在 reverse 操作时,使用的是 n 而非 a.size() 来计算前半部分的范围。因为在 shift 操作后,a 的元素顺序改变了,但 n 并未改变,所以这会导致 reverse 操作的范围出错。
以下是修正后的代码: