Information
- ID
- 901
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 10
- Tags
- # Submissions
- 1
- Accepted
- 1
- Uploaded By
#include<bits/stdc++.h>
using namespace std;
/*
归纳规律:
1、弹牌:
原来 1 ~ n/2位置之间的数,会存入新数组的i*2+1位置
原来n/2+1 ~ n位置之间的数,会存入新数组的i*2位置
2、切牌
将指定区间的元素放到数组的开始位置
*/
int a[100],b[100];
int n, m;
//将b数组的内容拷贝回a数组
void fun(){
for(int i = 1; i <= n; i++){
a[i] = b[i];
}
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
//m次操作
int order,x,y;
int k;//代表b数组长度
while(m--){
cin >> order;
//切牌
if(order == 1){
cin >> x >> y;
k = 0;
//将x ~ y之间的拷贝
for(int i = x; i <= y; i++){
k++;
b[k] = a[i];
}
//将剩余的拷贝
for(int i = 1; i <= n; i++){
if(i < x || i > y){
k++;
b[k] = a[i];
}
}
//将b数组拷贝回去
fun();
}
else {
for(int i = 1; i <= n/2; i++){
b[i*2-1] = a[i];//a前一半
b[i*2] = a[i+n/2];//a后一半
}
fun();
}
}
for(int i = 1; i <= n; i++){
cout << a[i];
if(i != n) cout << " ";//去除行末空格
}
return 0;
}
By signing up a 追梦算法网 universal account, you can submit code and join discussions in all online judging services provided by us.