結果
問題 |
No.3266 岩井星人は見ずにはいられない
|
ユーザー |
|
提出日時 | 2025-09-06 17:48:08 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 5 ms / 2,000 ms |
コード長 | 2,911 bytes |
コンパイル時間 | 6,067 ms |
コンパイル使用メモリ | 333,944 KB |
実行使用メモリ | 7,720 KB |
最終ジャッジ日時 | 2025-09-06 17:48:16 |
合計ジャッジ時間 | 7,230 ms |
ジャッジサーバーID (参考情報) |
judge / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 31 |
ソースコード
#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG //[]で配列外参照をするとエラーにしてくれる。上下のやつがないとTLEになるので注意 ABC311Eのサンプル4みたいなデバック中のTLEは防げないので注意 #endif #include <bits/stdc++.h> #include <algorithm> #include <cmath> // M_PIを使用するため #include <atcoder/all> using namespace std; using namespace atcoder; using ll = long long; using ld = long double; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define rrep(i, n) for (ll i = (ll)n - 1; i >= 0; --i) const ll INF = (1LL << 62); const ll null = -1LL; template <typename T> using vc = vector<T>; // prioriy_queueに必要なのでここにこれ書いてます template <typename T> using vv = vc<vc<T>>; template <typename T> using vvv = vv<vc<T>>; using vl = vc<ll>; using vvl = vv<ll>; using vvvl = vv<vl>; using vvvvl = vv<vvl>; using vs = vc<string>; using vvs = vv<string>; using vb = vc<bool>; using vvb = vc<vb>; using P = pair<ll, ll>; template <class T> istream &operator>>(istream &i, vc<T> &v) { rep(j, size(v)) i >> v[j]; return i; } // それぞれ「下,上,右,左」に対応 int dx[4] = {1, -1, 0, 0}; int dy[4] = {0, 0, 1, -1}; #define nall(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() template <class T> bool chmin(T &a, T b) { if (a > b) { a = b; return true; } return false; } template <class T> bool chmax(T &a, T b) { if (a < b) { a = b; return true; } return false; } #define pb push_back #define eb emplace_back #define em emplace #define pob pop_back #define next_p(v) next_permutation(v.begin(), v.end()) void solve() { ll n, a; cin >> n >> a; string s; cin >> s; vl cnt(2,0); ll start = 1200; ll sum = 0; rep(i,n) { cnt[(ll)(s[i] - '0')]++; if (s[i] == '1') { if (start < 1200ll) ++sum; start = min(start + 1ll, 1200ll); } else --start; if (sum == a) { cout << i + 1ll << endl; return; } } ll num = (a - sum - 1ll) / min(cnt[0],cnt[1]); ll ans = (num + 1ll) * n, rest = a - sum - min(cnt[0],cnt[1]) * num; if (cnt[0] < cnt[1]) { for (char c : s) { ++ans; if (c == '1') { if (start < 1200ll) --rest; start = min(start + 1ll, 1200ll); } else --start; if (rest <= 0) { break; } } } else { for (char c : s) { ++ans; if (c == '1') --rest; if (rest <= 0) { break; } } } cout << ans << endl; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll testcases = 1ll; // cin >> testcases; rep(_, testcases) solve(); return 0; }