白駿15656 NとM(7)


1.問題リンク


https://www.acmicpc.net/problem/15656

2.解答

  • Inputは配列として受信してソートする論理が追加された.
  • の後に反復シーケンスロジックが適用されるので、重複値を許可するアクセスはチェックされません.
  • Inputは出力量を増やすのでStringBuilderを使用して時間を減らすことができます.
  • 3.コード

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    
    public class Main {
    
        static int N, M;
        static int[] nums;
        static int[] candidate;
        static StringBuilder sb = new StringBuilder();
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String[] nm = br.readLine().split(" ");
            N = Integer.parseInt(nm[0]);
            M = Integer.parseInt(nm[1]);
    
            nums = new int[N];
            candidate = new int[M];
    
            String[] line = br.readLine().split(" ");
            for (int i = 0; i < N; i++) {
                nums[i] = Integer.parseInt(line[i]);
            }
    
            Arrays.sort(nums);
    
            permutation(0);
    
            System.out.print(sb);
        }
    
        static void permutation(int depth) {
            if (depth == M) {
                for (int i = 0; i < M; i++) {
                    sb.append(candidate[i]).append(" ");
                }
                sb.append("\n");
                return;
            }
    
            for (int i = 0; i < N; i++) {
                candidate[depth] = nums[i];
                permutation(depth + 1);
    
            }
        }
    }

    4.採点結果



    5.感じ

  • シーケンスロジックを繰り返すほか、Inputをソートする必要があります.
  • Outputが多い場合は、StringBuilder
  • を使用することを推奨します.