はまやんはまやんはまやん

hamayanhamayan's blog

well known [yukicoder No.796]

https://yukicoder.me/problems/no/796

解説

https://yukicoder.me/submissions/323223

3つの条件を見たときに、一番制約が厳しいのが最後の条件である。
なるべく小さい数の方が良いので、その方向で考える。
全部1にして、1つだけ3にすれば、下2つの制約はクリアできる。
最後に総和のmod3を見る。
mod3で0ならば、とある1を2にすればいい。
mod3で1なら、なにもしない。
mod3で2なら、とある1を3にすればいい。

int N;
int ans[101010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;

    rep(i, 0, N) ans[i] = 1;
    ans[0] = 3;

    int sm = 0;
    rep(i, 0, N) sm += ans[i];

    if (sm % 3 == 0) ans[1]++;
    else if (sm % 3 == 2) ans[1] += 2;

    rep(i, 0, N) printf("%d%s", ans[i], i == N - 1 ? "\n" : " ");
}