7-16ソートを挿入するか、ソートを集計するか(25分)
8784 ワード
タイトルリンク:https://pintia.cn/problem-sets/1110537862649819136/problems/1110537981575114767
テーマ:
ウィキペディアの定義によると:
挿入ソートは反復アルゴリズムであり,入力データを1つずつ取得し,秩序ある出力シーケンスを逐次生成する.各ステップ反復では、アルゴリズムは入力シーケンスから要素を取り出し、秩序化シーケンスの正しい位置に挿入します.このように、すべての要素が整列するまで反復します.
集計ソートは、まず、元のシーケンスをN個の要素のみを含む整列サブシーケンスと見なし、次いで、最後に1個の整列サブシーケンスのみが残るまで、2つの隣接する整列サブシーケンスを反復ごとに集計する反復操作を行う.
元のシーケンスとソートアルゴリズムによって生成された中間シーケンスを指定します.このアルゴリズムはいったいどのソートアルゴリズムなのか判断してください.
入力は、1行目に正の整数N(≦100)を与える.次の行は、元のシーケンスのN個の整数を与える.最後の行は、あるソートアルゴリズムによって生成された中間シーケンスを与える.ここでは、ソートのターゲットシーケンスが昇順であると仮定します.数字の間はスペースで区切られています.
まず、1行目の出力
具体的な考え方:
挿入ソートを判断する際には,どの位置がインクリメントされていないかを判断し,この点の後ろの配列と元の配列が同じかを判断することで,前の部分は既に並んでいるが,後ろの配列は並んでいないと理解できる.
そして集計ソートの場合、このソートの思想は分治の思想に似ていて、各小段を並べて、それからまとめて並べます.最初は2つ2つで、それから4つで、このような状況です.この問題については,まず元の配列から操作を行い,b配列のStepがどれだけあるかを見てからStep*2,さらに順番を並べて,もう一歩の感覚で直接出力すればよい.
ACコード:
転載先:https://www.cnblogs.com/letlifestop/p/10616198.html
テーマ:
ウィキペディアの定義によると:
挿入ソートは反復アルゴリズムであり,入力データを1つずつ取得し,秩序ある出力シーケンスを逐次生成する.各ステップ反復では、アルゴリズムは入力シーケンスから要素を取り出し、秩序化シーケンスの正しい位置に挿入します.このように、すべての要素が整列するまで反復します.
集計ソートは、まず、元のシーケンスをN個の要素のみを含む整列サブシーケンスと見なし、次いで、最後に1個の整列サブシーケンスのみが残るまで、2つの隣接する整列サブシーケンスを反復ごとに集計する反復操作を行う.
元のシーケンスとソートアルゴリズムによって生成された中間シーケンスを指定します.このアルゴリズムはいったいどのソートアルゴリズムなのか判断してください.
入力形式:
入力は、1行目に正の整数N(≦100)を与える.次の行は、元のシーケンスのN個の整数を与える.最後の行は、あるソートアルゴリズムによって生成された中間シーケンスを与える.ここでは、ソートのターゲットシーケンスが昇順であると仮定します.数字の間はスペースで区切られています.
出力フォーマット:
まず、1行目の出力
Insertion Sort
が挿入ソートを示し、またはMerge Sort
が集計ソートを示す.そして、2行目に、このソートアルゴリズムでさらに1ラウンド反復した結果シーケンスを出力する.問題は各グループのテストの結果が唯一であることを保証します.数値間はスペースで区切られており、行の先頭と末尾に余分なスペースがないようにしてください.具体的な考え方:
挿入ソートを判断する際には,どの位置がインクリメントされていないかを判断し,この点の後ろの配列と元の配列が同じかを判断することで,前の部分は既に並んでいるが,後ろの配列は並んでいないと理解できる.
そして集計ソートの場合、このソートの思想は分治の思想に似ていて、各小段を並べて、それからまとめて並べます.最初は2つ2つで、それから4つで、このような状況です.この問題については,まず元の配列から操作を行い,b配列のStepがどれだけあるかを見てからStep*2,さらに順番を並べて,もう一歩の感覚で直接出力すればよい.
ACコード:
1 #include
2 using namespace std;
3 # define ll long long
4 # define inf 0x3f3f3f3f
5 const int maxn = 2e5+100;
6 int a[maxn];
7 int b[maxn];
8 int n;
9 bool judge(int t){
10 for(int i=0;i){
11 if(a[i]!=b[i])return false;
12 }
13 return true;
14 }
15 int main(){
16 scanf("%d",&n);
17 for(int i=0;i){
18 scanf("%d",&a[i]);
19 }
20 for(int j=0;j){
21 scanf("%d",&b[j]);
22 }
23 int i,j;
24 for( i=1;i=b[i-1];i++);
25 for( j=i;j);
26 if(j==n){
27 printf("Insertion Sort
");
28 sort(b,b+i+1,n));
29 for(int i=0;i){
30 if(i==0)printf("%d",b[i]);
31 else printf(" %d",b[i]);
32 }
33 printf("
");
34 return 0;
35 }
36 printf("Merge Sort
");
37 i=2;
38 for(;!judge(i);i+=i){
39 for(int j=0;ji,n));
40 }
41 for(int j=0;ji,n));
42 for(int i=0;i){
43 if(i==0)printf("%d",a[i]);
44 else printf(" %d",a[i]);
45 }
46 printf("
");
47 return 0;
48 }
転載先:https://www.cnblogs.com/letlifestop/p/10616198.html