結果
問題 |
No.3266 岩井星人は見ずにはいられない
|
ユーザー |
![]() |
提出日時 | 2025-08-16 14:09:35 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 13 ms / 2,000 ms |
コード長 | 1,146 bytes |
コンパイル時間 | 3,236 ms |
コンパイル使用メモリ | 281,644 KB |
実行使用メモリ | 8,192 KB |
最終ジャッジ日時 | 2025-08-16 14:09:41 |
合計ジャッジ時間 | 5,044 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 31 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) int main() { long long N, A; cin >> N >> A; string S; cin >> S; int zero_cnt = 0; vector<vector<long long>> AC_counts(2, vector<long long>(N)); rep(i, 2) rep(j, N) { if (S[j] == '0') { zero_cnt++; } if (S[j] == '1' && 0 < zero_cnt) { zero_cnt--; AC_counts[i][j]++; } } rep(i, N - 1) { AC_counts[0][i + 1] += AC_counts[0][i]; AC_counts[1][i + 1] += AC_counts[1][i]; } long long ans = 0; if (A <= AC_counts[0].back()) { ans = distance(AC_counts[0].begin(), find(AC_counts[0].begin(), AC_counts[0].end(), A)) + 1; } else { A -= AC_counts[0].back(); long long cycle = (A + AC_counts[1].back() - 1) / AC_counts[1].back() - 1; ans += N + cycle * N; A -= cycle * AC_counts[1].back(); ans += distance(AC_counts[1].begin(), find(AC_counts[1].begin(), AC_counts[1].end(), A)) + 1; } cout << ans << endl; return 0; }