結果
| 問題 |
No.3365 Prefix and Suffix X
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-17 21:17:43 |
| 言語 | C# (.NET 8.0.404) |
| 結果 |
AC
|
| 実行時間 | 228 ms / 2,000 ms |
| コード長 | 1,460 bytes |
| コンパイル時間 | 9,284 ms |
| コンパイル使用メモリ | 171,552 KB |
| 実行使用メモリ | 216,532 KB |
| 最終ジャッジ日時 | 2025-11-17 21:18:05 |
| 合計ジャッジ時間 | 19,916 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 30 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (110 ミリ秒)。 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);
T I<T>() where T : IParsable<T>
{
while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0);
return T.Parse(_input[_iter++], null);
}
#endregion
static T[] Range<T>(int n, Func<T> F) => Enumerable.Range(0, n).Select(_ => F()).ToArray();
static (long d, long x, long y) ExtendedGCD(long a, long b)
{
var (x0, y0, x1, y1) = (1L, 0L, 0L, 1L);
while (b != 0)
{
var q = a / b;
(a, b) = (b, a - q * b);
(x0, y0, x1, y1) = (x1, y1, x0 - q * x1, y0 - q * y1);
}
return (a, x0, y0);
}
static long? ModDiv(long a, long b, long m)
{
if (b == 0) throw new DivideByZeroException();
var (d, t, _) = ExtendedGCD(b, m);
if (a % d != 0) return null;
if (d < 0) (d, t) = (-d, -t);
var dm = m / d;
var y = (long)((Int128)a / d * t % dm);
if (y < 0) y += dm;
return y;
}
long Solve()
{
var xs = I<string>();
var x = int.Parse(xs);
var m = I<int>();
var k1 = 1L;
var k2 = 1L;
var l = xs.Length;
for (var i = 0; i < l; i++) k1 *= 10;
for (var i = 0; i < 18 - l; i++) k2 *= 10;
var r = (k2 + 1) * x;
var q = -r % m;
if (q < 0) q += m;
var yo = ModDiv(q, k1, m);
if (yo == null) return -1;
var y = yo.Value;
return r + y * k1;
}
var t = I<int>();
var ans = Range(t, Solve);
Console.WriteLine(string.Join(Environment.NewLine, ans));