600300 - 选猴王

n只猴子围成一圈,从编号为1的猴子开始报数,数到m的猴子出圈,下一只猴子从1重新开始报数,数到m的猴子出圈,如此往复最后剩下一只猴子时,这只猴子就是猴王。依次输出出圈的猴子的编号。

输入

一行,两个整数n,m

对于100%的数据:

1 \le n,m \le 10^3

输出

一行,由单个空格分隔的n个整数,表示出圈顺序。

样例

输入

8 5

输出

5 2 8 7 1 4 6 3

提示

list(双向链表):

//1、链表初始化:
list<int> lst;			//空链表
list<int> lst(10);		//有10个元素
list<int> lst(10,5);	//有10个元素,均为5
//2、插入元素
lst.push_front(1);		//在前面插入1
lst.push_back(9);		//在后面插入9
lst.insert(it,6);		//在it位置插入6
//3、删除元素
/*特别注意下面的erase()函数,它删除迭代器指向的元素之后,将会有一个返回值,该返回值指向的是下一个元素,标准的写法是it=lst.erase(it)。若使用lst.erase(it)而不修改it,则当前it指向的元素被删除之后,it指向的位置变为无效,下一次使用it就会发生错误,导致程序崩溃。*/
lst.erase(it);			//删除it指向的元素
lst.pop_front();		//删除首元素
lst.pop_back();			//删除尾元素
lst.clear();			//删除全部元素
lst.remove(8);			//删除全部为8的元素
//4、查找元素
it=lst.find(4);			//查找为4的元素,返回值为lst.end()说明未找到
it=lst.find(lst.begin(),lst.end(),4);	//在指定的迭代器之间查找为4的元素
//5、大小
sz=lst.size();			//链表里有多少个元素
//6、排序
lst.sort();				//升序排序
//7、迭代器
it只可以++或--即向后移动或向前移动
//8、合并
lst.merge(lst1);		//将list1合并到lst中。

合并时会进行比较元素,如果保存的类型不是基本数据类型(int ,string等)而是自定义类型,则需对自定义类型实现重载的小于比较运算符,如结构体:

struct Node {
	int s, d;		//起点位置、终点位置
	bool operator <(const Node& b) {
		return s < b.s;
	}
};

时间限制 1000 毫秒
内存限制 128 MB
统计
上一题 下一题