結果

問題 No.3266 岩井星人は見ずにはいられない
ユーザー tetra4
提出日時 2025-09-06 15:24:28
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 7 ms / 2,000 ms
コード長 2,292 bytes
コンパイル時間 2,732 ms
コンパイル使用メモリ 275,728 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-09-06 15:24:34
合計ジャッジ時間 3,915 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 31
権限があれば一括ダウンロードができます

ソースコード

diff #

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

using ll = int64_t;

ll N, A;
string S;

void input() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> N >> A >> S;
}

void solve() {
    ll zeros = count(S.begin(), S.end(), '0');
    ll ones = count(S.begin(), S.end(), '1');
    ll rate = 1200;
    ll ac = 0;
    ll ans = 0;
    if (zeros > ones) {
        while (ac < A) {
            ll r = rate;
            ll mx = rate;
            for (ll i=0; i<N; ++i) {
                if (S[i] == '0') {
                    --r;
                } else {
                    if (r < 1200) ++r;
                }
                mx = max(mx, r);
            }
            if (mx < 1200) {
                ll rem = A - ac;
                ll loop = (rem - 1) / ones;
                ans += loop * N;
                ac += loop * ones;
                rate += loop * (ones - zeros);
            }
            for (ll i=0; i<N; ++i) {
                ++ans;
                if (S[i] == '0') {
                    --rate;
                } else {
                    if (rate < 1200) {
                        ++ac;
                        ++rate;
                    }
                }
                if (ac == A) {
                    cout << ans << "\n";
                    return;
                }
            }
        }
    } else {
        while (ac < A) {
            ll r = rate;
            for (ll i=0; i<N; ++i) {
                if (S[i] == '0') {
                    --r;
                } else {
                    if (r < 1200) ++r;
                }
            }
            if (r == rate) {
                ll rem = A - ac;
                ll loop = (rem - 1) / zeros;
                ans += loop * N;
                ac += loop * zeros;
            }
            for (ll i=0; i<N; ++i) {
                ++ans;
                if (S[i] == '0') {
                    --rate;
                } else {
                    if (rate < 1200) {
                        ++ac;
                        ++rate;
                    }
                }
                if (ac == A) {
                    cout << ans << "\n";
                    return;
                }
            }
        }
    }
}

int main() {
    input();
    solve();
    return 0;
}

/* 考察

*/
0