結果

問題 No.3317 ワロングアンサーロングアンサーンスワロンガー
コンテスト
ユーザー tobisatis
提出日時 2025-10-31 23:39:34
言語 C#
(.NET 8.0.404)
結果
RE  
実行時間 -
コード長 2,198 bytes
コンパイル時間 8,067 ms
コンパイル使用メモリ 171,352 KB
実行使用メモリ 219,012 KB
最終ジャッジ日時 2025-10-31 23:40:15
合計ジャッジ時間 38,823 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 17 RE * 45
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (117 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

#nullable enable

#region
var (_input, _iter) = (Array.Empty<string>(), 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 max = (1L << 60) + 2;
var powers = new (long, long)[124];
powers[0] = (1, 0);
for (var i = 0; i < 123; i++)
{
    var (a, b) = powers[i];
    powers[i + 1] = (Math.Min(max, a * 2), Math.Min(max, a * 4 + b));
}

var n = I<int>();
var q = I<int>();
var s = String();
var queries = new (long, long, long, int)[q];
for (var i = 0; i < q; i++)
{
    var ti = I<long>();
    var xi = I<long>() - 1;
    queries[i] = (Math.Min(ti, 60), xi, ti, i);
}
Array.Sort(queries);
var ans = new char[q];
var j = 0;
var (mt, x, t, k) = queries[j];
char SolveW(long t, long x)
{
    if (t > 123) return SolveW(t % 60 + 60, x);
    if (t == 0) return 'w';
    var (a, b) = powers[t - 1];
    var s = a + b;
    if (x < s) return SolveW(t - 1, x);
    x -= s;
    if (x < s) return SolveA(t - 1, x);
    x -= s;
    return "rong"[(int)x];
}
char SolveA(long t, long x)
{
    if (t > 123) return SolveA(t % 60 + 60, x);
    if (t == 0) return 'a';
    var (a, b) = powers[t - 1];
    var s = a + b;
    if (x < s) return SolveA(t - 1, x);
    x -= s;
    if (x == 0) return 'n';
    if (x == 1) return 's';
    x -= 2;
    if (x < s) return SolveW(t - 1, x);
    x -= s;
    return "er"[(int)x];
}
for (var tl = 1; tl <= 60; tl++)
{
    var ci = 0L;
    foreach (var c in s)
    {
        while (mt == tl && ci == x)
        {
            ans[k] = c;
            j++;
            if (j == q) break;
            (mt, x, t, k) = queries[j];
        }
        if (c == 'w' || c == 'a')
        {
            var (a, b) = powers[tl];
            var r = ci + a + b;
            r = Math.Min(max, r);
            while (mt == tl && x < r)
            {
                ans[k] = c == 'w' ? SolveW(t, x - ci) : SolveA(t, x - ci);
                j++;
                if (j == q) break;
                (mt, x, t, k) = queries[j];
            }
            ci = r;
        }
        else ci++;
    }
}
Console.WriteLine(new string(ans));
0