結果
| 問題 | No.635 自然門松列 |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-10-29 18:03:46 |
| 言語 | C# (.NET 10.0.402 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 39 ms / 650 ms |
| + 941µs | |
| コード長 | 2,723 bytes |
| 記録 | |
| コンパイル時間 | 11,721 ms |
| コンパイル使用メモリ | 170,148 KB |
| 実行使用メモリ | 33,024 KB |
| 最終ジャッジ日時 | 2026-10-29 18:04:10 |
| 合計ジャッジ時間 | 10,814 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge5_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 24 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (190 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net10.0/main.dll main -> /home/judge/data/code/bin/Release/net10.0/publish/
ソースコード
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 char[][] SList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => ReadLine().ToCharArray()).ToArray();
public static void Main()
{
Solve();
}
static void Solve()
{
var t = NN;
var ans = new bool[t];
for (var u = 0; u < t; ++u)
{
var c = NList;
ans[u] = Kado(c[0], c[1], c[2], c[3], c[4], c[5]);
}
WriteLine(string.Join("\n", ans.Select(f => f ? "YES" : "NO")));
}
static bool Kado(int a, int b, int c, int x, int y, int z)
{
var abeq = EqTime(a, b, x, y);
var bceq = EqTime(b, c, y, z);
var aceq = EqTime(a, c, x, z);
if (abeq.pa == 0 || bceq.pa == 0 || aceq.pa == 0) return false;
if (Check(a, b, c, x, y, z, 0) || Check(a, b, c, x, y, z, 10000) || Check(a, b, c, x, y, z, 0.00001)) return true;
if (abeq.ch > 0 && bceq.ch > 0)
{
var t = ((double)abeq.ch / abeq.pa + (double)bceq.ch / bceq.pa) / 2;
if (Check(a, b, c, x, y, z, t)) return true;
}
if (abeq.ch > 0)
{
var abt = (double)abeq.ch / abeq.pa;
if (Check(a, b, c, x, y, z, abt + 0.00001) || Check(a, b, c, x, y, z, abt - 0.00001)) return true;
}
if (bceq.ch > 0)
{
var bct = (double)bceq.ch / bceq.pa;
if (Check(a, b, c, x, y, z, bct + 0.00001) || Check(a, b, c, x, y, z, bct - 0.00001)) return true;
}
return false;
}
static bool Check(int a, int b, int c, int x, int y, int z, double t)
{
var at = a + x * t;
var bt = b + y * t;
var ct = c + z * t;
return ((at > bt && bt < ct) || (at < bt && bt > ct)) && at != ct;
}
// aとbが同じになる時刻を有理数で返す
static (int ch, int pa) EqTime(int a, int b, int x, int y)
{
if (a == b && x == y) return (1, 0);
if (a == b) return (0, 1);
if (x == y) return (-1, 1);
// a + xt == b + yt
// t == (b - a) / (x - y)
var ch = b - a;
var pa = x - y;
if (pa < 0)
{
ch = -ch;
pa = -pa;
}
var gcd = GCD(Math.Abs(ch), pa);
return (ch / gcd, pa / gcd);
}
static int GCD(int a, int b)
{
if (a < b) return GCD(b, a);
if (a % b == 0) return b;
return GCD(b, a % b);
}
}