結果

問題 No.3559 +A,-B
コンテスト
ユーザー tobisatis
提出日時 2026-05-29 20:13:28
言語 C#
(.NET 10.0.201)
コンパイル:
dotnet_c
実行:
/usr/bin/dotnet_wrap
結果
WA  
実行時間 -
コード長 1,696 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 16,026 ms
コンパイル使用メモリ 174,604 KB
実行使用メモリ 247,548 KB
最終ジャッジ日時 2026-05-29 20:13:52
合計ジャッジ時間 22,843 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge3_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点1 10 % AC * 2 WA * 2
部分点2 60 % WA * 7
部分点3 30 % AC * 2 WA * 18
合計 0 点
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (139 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net10.0/main.dll
  main -> /home/judge/data/code/bin/Release/net10.0/publish/

ソースコード

diff #
raw source code

#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()!.Trim().Split(' '), 0);
    return T.Parse(_input[_iter++], null);
}
#endregion

static long DivInt(long p, long q, bool ceiling)
{
    if (q < 0) return DivInt(-p, -q, ceiling);
    if (!ceiling && p < 0) p -= q - 1;
    if (ceiling && p >= 0) p += q - 1;
    return p / q;
}

(long, long) Solve()
{
    var n = I<int>();
    var ix = I<long>();
    var iy = I<long>();
    var a = I<long>();
    var b = I<long>();

    (long, long) Moved(long tx, long ty) => (ix + a * tx, iy - b * ty);

    var si = ix + iy;
    if (si >= 0)
    {
        var ny = iy - b * n;
        if (ix + ny >= 0) return (ix, ny);
        else if (a <= 0)
        {
            var k = DivInt(si, b, true);
            return Moved(n - k, k);
        }
    }
    else
    {
        var nx = ix + a * n;
        if (nx + iy < 0) return (nx, iy);
        else if (b <= 0)
        {
            var k = DivInt(-si, a, true);
            return Moved(k, n - k);
        }
    }
    long pass = n;
    long fail = -1;
    while (pass - fail >= 2)
    {
        var m = (pass + fail) >> 1;
        var x = ix + a * m;
        var y = iy - b * (n - m);
        var s = x + y;
        var f = true;
        if (s > 0) f &= s < a;
        if (s < 0) f &= -s <= b;
        if (f) pass = m;
        else fail = m;
    }
    return Moved(pass, n - pass);
}

var ans = new List<string>();
var t = I<int>();
for (var i = 0; i < t; i++)
{
    var (x, y) = Solve();
    ans.Add(x + " " + y);
}
Console.WriteLine(string.Join(Environment.NewLine, ans));
0