[火星] NOIP
タイトル説明
男は最終的に火星の土地に乗り込んだと神秘的な火星を見ました。人間と火星人はお互いの言語を理解することはできませんが、私たちの科学者は、デジタル通信の方法を発明しました。この交換方法は、まず、人間の科学者の非常に大きな数に火星人は科学者がこの番号の意味を壊す伝え、その後、上記に追加し、多数の非常に小さな数、結果は火星を伝える、つまり人間の答えとして。
指をスナップ - 数字を表現するための非常に単純な方法で火星。指の数万の火星片手だけが、唯一の手は、行内の指は、1,2,3の番号が付けられています... 1,2,3 .... 火星の任意の二本の指が自由に彼らはこの方法でカウントされ、位置を交換することができます。
人間の手のショーでA火星はどのように指でカウントします。それらは通常の順に配置されたときに親指、人差し指、ミドル、リングと小指とき5桁12345、リングと少し交流を形成する、3、4と5の番号が付けられている - 5本の指がいる場合第二ピニオン12354;位置は、1を表し、5桁12354、すべての5桁120に形成された完全に逆転5本の指、54321の注文を置く際に形成することができ、最小12345を形成する場合、2を表す、最大54321、120を表します。以下の表に示す3本のだけ指と数字は、それらが表すときに形成することができる6 3桁。
三元数
123
132
213
231
312 321
数値は表し
1
2
3
4
5
6
今、あなたは幸運十分には地球と火星の最初の人々は人々とコミュニケーションすることができます。A火星は、あなたが彼の指を見てみましょうし、科学者たちは一緒に非常に小さな数字を行くことを教えてくれます。あなたの仕事は、科学者火星の数が一緒にあなたの番号を教え、そしてまた、その結果に応じ火星の指の順序を変更するには、指で表現されます。結果は、火星の指の範囲を超えないことを確実にするために、入力データを表現することができます。
入力形式
三行の合計。
最初の行の正の整数N、火星の指の数(1≤N≤10000)。
二行目は、正の整数Mである、彼は小さな整数(1≤M≤100)に追加すると述べました。
次の行は、火星は、指の順番を表し、N 1は、Nを整数に配置されたスペースで区切られています。
出力フォーマット
Nの整数は、火星は指の変更後の順序を示します。スペースで区切られたすべての隣接する二つの中間の数字は、あなたは余分なスペースを持つことができません。
サンプル入力と出力
入力#1の複製
。5
。3
1 2 4 3 5
出力#1複製
12453
説明/ヒント
データ、N≤15の30%。
データ、N≤50の60%。
すべてのデータについては、N≤10000。
グループ4タイトルのnoip2004人気
分析
この質問は、この機能は直接使用するアルゴリズムです。。
next_permutation()
この種の要件が置換されることを意味し、全体構成が横断することができます
prev_permutation()
及び(ソート関数を求めるに揃えられる)next_permutation()反対
カントールも拡大溶液で見られます。
以下は、あるポータル
私は理解していれば、コードより、理解しにくい忘れやすい,,および他のフリー熟考参照してください。
コード
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int a[10005];
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
while(m--){
next_permutation(a,a+n);
}
for(int i=0;i<n-1;i++){
cout<<a[i]<<" ";
}
cout<<a[n-1]<<endl;
return 0;
}