結果

問題 No.2628 Shrinkage
ユーザー kakel-sankakel-san
提出日時 2024-02-16 22:12:22
言語 C#
(.NET 8.0.203)
結果
WA  
実行時間 -
コード長 3,011 bytes
コンパイル時間 8,974 ms
コンパイル使用メモリ 169,320 KB
実行使用メモリ 190,008 KB
最終ジャッジ日時 2024-09-28 20:46:48
合計ジャッジ時間 8,844 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 49 ms
30,324 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 AC 49 ms
30,592 KB
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (98 ms)。
MSBuild のバージョン 17.9.6+a4ecab324 (.NET)
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

using System;
using static System.Console;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static int NN => int.Parse(ReadLine());
    static int[] NList => ReadLine().Split().Select(int.Parse).ToArray();
    static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray();
    public static void Main()
    {
        Solve();
        // Test();
    }
    static void Test()
    {
        var r = new Random();
        var count = 0;
        while (true)
        {
            var (x1, y1, x2, y2) = (r.Next(10), r.Next(10), r.Next(10), r.Next(10));
            var (cx, cy, a) = (r.Next(10), r.Next(10), r.NextDouble());
            var b = Trans(x1, y1, x2, y2, cx, cy, a);
            if (!Check(x1, y1, x2, y2, b.x1, b.y1, b.x2, b.y2))
            {
                WriteLine($"{x1} {y1} {x2} {y2} -> {cx} {cy} {a} -> {b}");
                var dbx = x2 - x1;
                var dby = y2 - y1;
                var dax = b.x2 - b.x1;
                var day = b.y2 - b.y1;
                WriteLine($"{dbx} {dby} {dax} {day}");
                return;
            }
            ++count;
            if (count % 1000 == 0) WriteLine(count);
        }
    }
    static (double x1, double y1, double x2, double y2) Trans(double x1, double y1, double x2, double y2, double cx, double cy, double a)
    {
        return ((1-a) * x1 + a * cx, (1-a) * y1 + a * cy, (1-a) * x2 + a * cx, (1-a) * y2 + a * cy);
    }
    static bool Check(double x1, double y1, double x2, double y2, double bx1, double by1, double bx2, double by2)
    {
        if (x1 == bx1 && y1 == by1 && x2 == bx2 && y2 == by2) return true;
        var dbx = x2 - x1;
        var dby = y2 - y1;
        var dax = bx2 - bx1;
        var day = by2 - by1;
        if ((dbx >= 0 != dax >= 0) || (dby >= 0 != day >= 0)) return false;
        if (Math.Abs(dbx) < Math.Abs(dax) || Math.Abs(dby) < Math.Abs(day)) return false;
        if ((dbx != 0 && Eq(dbx, dax)) || (dby != 0 && Eq(dby, day))) return false;
        return true;
    }
    static bool Eq(double a, double b)
    {
        return Math.Abs(a - b) < 0.00001 || Math.Abs(Math.Abs(b / a) - 1) < 0.00001;
    }
    static void Solve()
    {
        var t = NN;
        var ans = new bool[t];
        for (var u = 0; u < t; ++u)
        {
            var c = NList;
            if (c[0] == c[4] && c[1] == c[5] && c[2] == c[6] && c[3] == c[7]) ans[u] = true;
            var dbx = c[2] - c[0];
            var dby = c[3] - c[1];
            var dax = c[6] - c[4];
            var day = c[7] - c[5];
            if ((dbx >= 0 != dax >= 0) || (dby >= 0 != day >= 0)) continue;
            if (Math.Abs(dbx) < Math.Abs(dax) || Math.Abs(dby) < Math.Abs(day)) continue;
            if ((dbx != 0 && dbx == dax) || (dby != 0 && dby == day)) continue;
            ans[u] = true;
        }
        WriteLine(string.Join("\n", ans.Select(f => f ? "Yes" : "No")));
    }
}
0