OpenJudge

36:序列操作-类封装

总时间限制:
1000ms
内存限制:
65535kB
描述

有一个从1n的序列(n<=1000)。对序列进行m操作(m<=2000)。

每次有两种操作:

移动:将值为a和值为b之间的数(包括ab)移到值为k的后面。比如,对于序列1 2 3 4 5,将23之间的数字移动到数字4的后面,序列将变为1 4 2 3 5

反转:将值为a和值为b之间数反转。比如:对于序列1 4 2 3 5,反转4 3,变为1 3 2 4 5



输入
第一行输入一个整数t,表示测试数据的组数。
对于每组测试数据,第一行输入两个整数n,m;
每次操作首先输入一个字符type。
当type=”m”,移动操作,接着输入三个整数a,b,k,保证b的下标大于等于a的下标,,k不在a、b之间。
当type=”r”,反转操作,接着输入两个整数a,b,保证b的下标大于等于a的下标。
输出
对于每组测试数据,输出n个整数,表示经过m次操作后的序列。注意最后一个数字后面不要输出空格。
样例输入
1
5 5
m 2 3 4
r 4 2
r 1 4
r 2 3
m 3 2 5
样例输出
4 5 3 1 2
提示
请用类封装的思想完成自己的数组类,封装移动和反转两个操作,参考如下:
class MyArray
{
public:
MyArray()
{
arr = NULL;
arr_size = -1;
}
~MyArray()
{
if (arr != NULL)
free(arr); // if you use "malloc" to allocate memory
// or you can use c++ style: "delete" corresponding to "new"
arr_size = -1;
}
void new_arr(int n); // allocate array, size is n

void segment_move(int a, int b, int k);

void segment_reverse(int a, int b);

void print(); // print all element in the array

private:
// private variable only used by public function
// means, a.arr is error statement, a is a object of MyArray
int *arr;
int arr_size;
};
全局题号
6916
添加于
2015-11-24
提交次数
98
尝试人数
56
通过人数
51