結果
| 問題 |
No.3266 岩井星人は見ずにはいられない
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-06 15:40:59 |
| 言語 | C# (.NET 8.0.404) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,870 bytes |
| コンパイル時間 | 13,035 ms |
| コンパイル使用メモリ | 170,224 KB |
| 実行使用メモリ | 39,972 KB |
| 最終ジャッジ日時 | 2025-09-06 15:41:16 |
| 合計ジャッジ時間 | 14,611 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 4 |
| other | WA * 10 TLE * 1 -- * 20 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (104 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
#nullable enable
#region
var _input = Array.Empty<string>();
var _iter = 0;
string String()
{
while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0);
return _input[_iter++];
}
T I<T>() where T : IParsable<T> => T.Parse(String(), null);
#endregion
var n = I<int>();
var a = I<long>();
var s = String().Select(c => c - '0').ToArray();
var ss = new int[n * 2 + 1];
for (var i = 1; i <= n * 2; i++) ss[i] = ss[i - 1] + s[i % n];
var nexts = new int[n];
nexts.AsSpan().Fill(-1);
long G(int p, long k)
{
var dk = ss[p + n] - ss[p];
var rep = k / dk;
k -= rep * dk;
return rep * n + F(p, k, 1);
}
long F(int p, long k, int last)
{
if (last < 2 && nexts[p] >= 0)
{
var t = p;
var res = 0L;
var sdk = 0;
while (true)
{
var next = nexts[t];
var dk = ss[next] - ss[t];
if (next <= t) dk = ss[next + n] - ss[t];
dk--;
if (dk >= k) return res + F(t, k, 2);
k -= dk;
sdk += dk;
res += next - t;
if (next <= t) res += n;
t = next;
if (t == p) break;
}
var rep = k / sdk;
res *= rep + 1;
k -= rep * sdk;
if (k == 0) return res;
return res + F(p, k, last);
}
var r = 1200;
var i = 0;
var j = p;
while (true)
{
if (last < 2 && i >= n) break;
if (r > 1200)
{
nexts[p] = j;
var d = j - p;
if (d <= 0) d += n;
return F(j, k, last) + d;
}
if (s[j] == 0) r--;
else
{
if (r < 1200) k--;
r++;
if (k == 0) return i + 1;
}
j++;
if (j == n) j = 0;
}
return G(p, k) + n;
}
var ans = F(0, a, 0);
Console.WriteLine(ans);