[伯俊/c+]15654号:NとM(5)


質問リンク-https://www.acmicpc.net/problem/15654

[質問]



[回答]

  • 以前の系列とは異なり、構成数列の値が(ユーザ)入力となる.
  • inputという配列が発表され,0番目のインデックスから順次値を入力しsortを用いてソートされる.
  • 以前の問題と同様に、input[i]に対応する値をcheck[input[i]で繰り返しチェックした.
  • [配列]
    #include<algorithm> 선언
    sort(arr,arr+n) 
    - 첫번째 인자 : 배열의 시작지점 (=배열의 포인터)
    - 두번재 인자 : 배열 끝나는지점+1 (=arr[배열의 포인터]+배열의 크기)

    [さまよう場所]

  • は、check[]、arr[]およびinput[]配列を最初に同じサイズの10配列として宣言した.
  • 題の条件から見ると、入力された数は10000の自然数に等しいか、またはそれ未満である.
  • check配列は、入力した数値がfunc関数の数列作成に使用されるかどうかを確認する配列であり、check[]のインデックスは0から10000の間でなければなりません.
  • check[1001]に変更すれば解決できます.
  • [コード]

    //15654번 : N과 M(5)
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    bool check[10001];
    int arr[10];
    int input[10];
    
    void func(int index, int n, int m){
        if(index>m){
            for(int i=1; i<=m; i++){
                cout<<arr[i] <<" ";
            }
            cout<<"\n";
            return;
        }
    
        for(int i=0; i<n;i++){
         
            if(check[input[i]])
            continue;
    
            check[input[i]]=true;
            arr[index]=input[i];
            func(index+1,n,m);
            check[input[i]]=false;
        }
    }
    
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        
        int n,m;
        cin>>n>>m;
        for(int i=0; i<n; i++){
            int x;
            cin>>x;
            input[i]=x;
        }
        sort(input,input+n);
        // func(index,n,m);
    
        func(1,n,m);
    }
    
    
    コメントサイト
    https://twpower.github.io/71-use-sort-and-stable_sort-in-cpp