結果
| 問題 |
No.3266 岩井星人は見ずにはいられない
|
| コンテスト | |
| ユーザー |
bolero
|
| 提出日時 | 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;
}
bolero