[AtCoder] キーエンス プログラミング コンテスト 2020 C – Subarray Sum

2020年12月15日

問題

方針

\( 0 \leq K \leq N \) という制約なので、この問題は簡単に解くことができます。\( A \) の \( K \) 個の要素が \( S \) を取るとき、\( N – K \) 個の要素をどのように決めれば良いかですが、\( S = 10^9 \) のとき、\( N – K \) 個の部分列の和が \( 10^9 \) にならなければよいので、\( 1 \) としておきます。一方で、\( S \neq 10^9 \) のとき、\( N – K \) 個の値を \( S + 1 \) とすれば良いです。

コード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    int N, K, S;
    cin >> N >> K >> S;
    int A[N]{};
    int v = 1000000000;
    for (int i = 0; i < K; i++) {
        A[i] = S;
    }
    if (S == v) {
        for (int i = K; i < N; i++) {
            A[i] = 1;
        }
    } else {
        for (int i = K; i < N; i++) {
            A[i] = v;
        }
    }
    for (int i = 0; i < N; i++) {
        if (i == N - 1) {
            cout << A[i] << "\n";
        } else {
            cout << A[i] << " ";
        }
    }
    return 0;
}