結果
| 問題 |
No.3317 ワロングアンサーロングアンサーンスワロンガー
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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/
ソースコード
#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));