結果
| 問題 |
No.3363 Two Closest Numbers
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-17 21:55:27 |
| 言語 | C# (.NET 8.0.404) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,771 bytes |
| コンパイル時間 | 11,395 ms |
| コンパイル使用メモリ | 172,752 KB |
| 実行使用メモリ | 206,868 KB |
| 最終ジャッジ日時 | 2025-11-17 21:55:51 |
| 合計ジャッジ時間 | 19,782 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 48 WA * 6 RE * 5 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (116 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
#nullable enable
using System.Numerics;
#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
const int Mod = 998244353;
static List<T>? NextPermutation<T>(List<T> p) where T : IComparable<T>
{
var a = p.ToList();
var b = new List<T> { a[^1] };
for (var i = a.Count - 2; i >= 0; i--)
{
var t = a[i];
if (t.CompareTo(b[^1]) >= 0) b.Add(t);
else
{
var k = 0;
while (k < b.Count && b[k].CompareTo(t) <= 0) k++;
(b[k], a[i]) = (t, b[k]);
for (var j = 0; j < b.Count; j++) a[i + 1 + j] = b[j];
return a;
}
}
return null;
}
static T[] Range<T>(int n, Func<T> F) => Enumerable.Range(0, n).Select(_ => F()).ToArray();
var n = I<int>();
var cz = Range(n, I<int>);
if (n % 2 == 1)
{
Array.Sort(cz);
var h = n / 2 + 1;
var ca1 = cz[..h].Select(v => (char)(v + '0')).ToArray();
var ca2 = cz[h..].Select(v => (char)(v + '0')).Reverse().ToArray();
var x = BigInteger.Parse(new string(ca1));
var y = BigInteger.Parse(new string(ca2));
Console.WriteLine((x - y) % Mod);
return;
}
var cd = new int[10];
foreach (var c in cz) cd[c] ^= 1;
var l = new List<int>();
for (var i = 1; i <= 9; i++) if (cd[i] > 0) l.Add(i);
var ans = int.MaxValue;
if (l.Count == 0) ans = 0;
while (l != null)
{
var (x, y) = (0, 0);
var h = l.Count / 2;
for (var i = 0; i < h; i++) x = x * 10 + l[i];
for (var i = h; i < l.Count; i++) y = y * 10 + l[i];
ans = Math.Min(ans, Math.Abs(x - y));
l = NextPermutation(l);
}
Console.WriteLine(ans);