题材叙述 Description,标题叙述 Description

1095 火星人

二零零四年NOIP全国联赛普及组

时间限制: 1 s

空间范围: 128000 KB

标题等级 : 黄金 高尔德

 

 

 

标题叙述 Description

 人类终于登上了金星的土地并且看来了心腹的木星人。人类和木星人都爱莫能助知道对方的言语,不过大家的数学家发明了一种用数字沟通的格局。这种互换格局是这么的,首先,土星人把一个可怜大的数字告诉人类化学家,物理学家破解那些数字的意思后,再把一个很小的数字加到这几个运气上边,把结果报告金星人,作为人类的答应。

火星人用一种卓殊不难的格局来代表数字——掰手指。金星人只有一只手,但那只手上有诸多的手指头,这个手指排成一列,分别编号为1,2,3……。火星人的随意两根手指都能轻易沟通地点,他们不怕通过那形式计数的。

一个木星人用一个生人的手演示了什么样用手指计数。如果把五根手指——拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按常规顺序排列时,形成了5位数12345,当你沟通无名指和小指的岗位时,会形成5位数12354,当您把五个手指的依次完全颠倒时,会形成54321,在装有可以形成的120个5位数中,12345小小的,它意味着1;12354次之小,它意味着2;54321最大,它表示120。下表展示了唯有3根手指时可以形成的6个3位数和它们代表的数字:

三进制数

123

132

213

231

312

321

 

意味着的数字

1

2

3

4

5

6

到现在你碰巧成为了首个和水星人沟通的地球人。一个紫炁星人会让您看她的指头,科学家会告诉你要添加去的很小的数。你的天职是,把火星人用指尖表示的数与化学家告诉您的数相加,并依照相加的结果改变罗睺人手指的排列顺序。输入数据保障那个结果不会胜出罗睺人手指能表示的界定。

输入描述 Input Description

输入包涵三行,第一行有一个正整数N,表示罗睺人手指的数码(1 <= N <=
10000)。第二行是一个正整数M,表示要添加去的小平头(1 <= M <=
100)。下一行是1到N那N个整数的一个排列,用空格隔开,表示金星人手指的排列顺序。

输出描述 Output Description

出口唯有一行,这一行含有N个整数,表示改变后的水星人手指的排列顺序。每三个相邻的数中间用一个空格分开,不只怕有剩余的空格。

样例输入 Sample Input

5

3

1 2 3 4 5

样例输出 Sample Output

1 2 4 5 3

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,m;
 5 int a[10010];
 6 int main(){
 7     scanf("%d%d",&n,&m);
 8     for (int i=0;i<n;i++) scanf("%d",&a[i]);
 9     for (int i=0;i<m;i++) next_permutation(a,a+n);
10     for (int i=0;i<n;i++) printf("%d ",a[i]);
11 }

 

1095 火星人

二〇〇四年NOIP全国联赛普及组

时间限制: 1 s

空间范围: 128000 KB

题目等级 : 黄金 高尔德

 

 

 

难题叙述 Description

 人类终于登上了水星的土地并且探望了隐私的金星人。人类和月孛星人都没办法儿理解对方的语言,可是大家的地理学家发明了一种用数字互换的法子。那种交换形式是如此的,首先,火星人把一个这么些大的数字告诉人类化学家,化学家破解那个数字的意义后,再把一个很小的数字加到那些运气上边,把结果告知火星人,作为人类的应对。

火星人用一种格外不难的点子来表示数字——掰手指。月孛星人唯有一只手,但那只手上有很多的手指,这一个手指排成一列,分别编号为1,2,3……。蚀星人的即兴两根手指都能自由交流地点,他们尽管经过那办法计数的。

一个金星人用一个人类的手演示了什么样用手指计数。即便把五根手指——拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按正常顺序排列时,形成了5位数12345,当您交流无名指和小指的职位时,会形成5位数12354,当您把多少个手指的次第完全颠倒时,会形成54321,在富有可以形成的120个5位数中,12345小小,它表示1;12354次之小,它象征2;54321最大,它象征120。下表浮现了只有3根手指时可以形成的6个3位数和它们代表的数字:

三进制数

123

132

213

231

312

321

 

意味着的数字

1

2

3

4

5

6

近期您碰巧成为了第三个和火星人交换的地球人。一个水星人会让您看他的指尖,化学家会告知你要添加去的很小的数。你的职务是,把水星人用手指表示的数与地理学家告诉您的数相加,并依据相加的结果改变罗睺人手指的排列顺序。输入数据保险这些结果不会压倒月孛星人手指能表示的限制。

输入描述 Input Description

输入包罗三行,第一行有一个正整数N,表示土星人手指的多少(1 <= N <=
10000)。第二行是一个正整数M,表示要丰硕去的小平头(1 <= M <=
100)。下一行是1到N那N个整数的一个排列,用空格隔开,表示紫炁星人手指的排列顺序。

出口描述 Output Description

出口只有一行,这一行含有N个整数,表示改变后的金星人手指的排列顺序。每多少个相邻的数中间用一个空格分开,不恐怕有剩余的空格。

样例输入 萨姆ple Input

5

3

1 2 3 4 5

样例输出 Sample Output

1 2 4 5 3

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,m;
 5 int a[10010];
 6 int main(){
 7     scanf("%d%d",&n,&m);
 8     for (int i=0;i<n;i++) scanf("%d",&a[i]);
 9     for (int i=0;i<m;i++) next_permutation(a,a+n);
10     for (int i=0;i<n;i++) printf("%d ",a[i]);
11 }

 

相关文章

网站地图xml地图