Yuulis.log

Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 382 B - Daily Cookie 2 | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 24

問題概要

 N 個の箱が横一列に並んでおり、そのうちのいくつかの箱にはクッキーが入っている。各箱の状態は長さ  N の文字列  S によって表され、左から  i 番目の箱は、  S_i =@のときクッキーが1枚入っており、.のとき空き箱である。

高橋君はこれから  D 日間、一日一回ずつ、その時点でクッキーが入っている箱のうち最も右にある箱のクッキーを選んで食べることにする。  N 個の箱それぞれについて、 D 日間が経過した後にその箱にクッキーが入っているかを求めよ。

制約

  •  N,D は整数。
  •  1\leq D \leq N \leq 100
  •  S には@ D 個以上含まれる。

考察

 Sreverseすれば、高橋君の行動は

  • これから  D 日間、一日一回ずつ、その時点でクッキーが入っている箱のうち最もにある箱のクッキーを選んで食べる。

と書き換えられる。これは、「 S を先頭から見ていって  S_i =@ならば.に置き換えることを、置き換えが  D 回になるまで繰り返す」ことで実現できる。

あとは再度  Sreverseして出力すれば OK 。

コード

#include <bits/stdc++.h>
using namespace std;

#define all(x) (x).begin(), (x).end()
#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)

// ======================================== //

int main()
{
    int N, D;
    string S;
    cin >> N >> D >> S;

    reverse(all(S));

    int cnt = 0;
    rep(i, 0, N)
    {
        if (S[i] == '@')
        {
            cnt++;
            S[i] = '.';
        }

        if (cnt == D)
            break;
    }

    reverse(all(S));

    cout << S << endl;
}

atcoder.jp

実装時間: 5分以内


最近の ABC は、「ほぼ同じ設定で条件を難しくしていく」ような出題形式がトレンドになっている気がする。