結果
| 問題 |
No.3336 Coincidence
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-07 22:20:25 |
| 言語 | C# (.NET 8.0.404) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,909 bytes |
| コンパイル時間 | 10,460 ms |
| コンパイル使用メモリ | 171,992 KB |
| 実行使用メモリ | 194,020 KB |
| 最終ジャッジ日時 | 2025-11-07 22:20:45 |
| 合計ジャッジ時間 | 19,425 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | WA * 33 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (112 ミリ秒)。 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 _sw = new StreamWriter(Console.OpenStandardOutput()){ AutoFlush = false };
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();
const int Min = -4;
const int Max = -Min;
static int D(int x1, int y1, int x2, int y2) => Math.Abs(x1 - x2) + Math.Abs(y1 - y2);
static bool Inside(int x, int y, int x1, int y1, int x2, int y2)
{
if ((x, y) == (x1, y1) || (x, y) == (x2, y2)) return false;
var minX = Math.Min(x1, x2);
var maxX = Math.Max(x1, x2);
var minY = Math.Min(y1, y2);
var maxY = Math.Max(y1, y2);
return minX <= x && x <= maxX && minY <= y && y <= maxY;
}
(int, int)[]? Solve()
{
var afx = I<int>();
var afy = I<int>();
var bfx = I<int>();
var bfy = I<int>();
var atx = I<int>();
var aty = I<int>();
var btx = I<int>();
var bty = I<int>();
if (Math.Abs(afx + afy) % 2 != Math.Abs(bfx + bfy) % 2) return null;
var (rx, ry) = (1, 1);
if (afx > bfx)
{
rx = -1;
afx *= -1;
bfx *= -1;
atx *= -1;
btx *= -1;
}
if (afy > bfy)
{
ry = -1;
afy *= -1;
aty *= -1;
bfy *= -1;
bty *= -1;
}
var (x, y) = (afx, afy);
while (x < bfx && D(x, y, afx, afy) != D(x, y, bfx, bfy)) x++;
if (x == bfx) while (D(x, y, afx, afy) != D(x, y, bfx, bfy)) y++;
while (x >= afx && !Inside(x, y, afx, afy, atx, aty) && !Inside(x, y, bfx, bfy, btx, bty)) (x, y) = (x - 1, y + 1);
if (x < afx) return null;
var wz = new HashSet<(int, int)>();
if (!Inside(atx, aty, x, y, -201, -201) && !Inside(btx, bty, x, y, -201, -201) && !Inside(atx, aty, x, y, 201, 201) && !Inside(btx, bty, x, y, 201, 201))
{
for (var xi = Min; xi < x; xi++) wz.Add((xi, y - 1));
for (var xi = Max; xi > x; xi--) wz.Add((xi, y + 1));
for (var yi = Min; yi < y; yi++) wz.Add((x - 1, yi));
for (var yi = Max; yi > y; yi--) wz.Add((x + 1, yi));
}
else
{
for (var xi = Min; xi < x; xi++) wz.Add((xi, y + 1));
for (var xi = Max; xi > x; xi--) wz.Add((xi, y - 1));
for (var yi = Min; yi < y; yi++) wz.Add((x + 1, yi));
for (var yi = Max; yi > y; yi--) wz.Add((x - 1, yi));
}
var res = wz.ToArray();
for (var i = 0; i < res.Length; i++)
{
var (xi, yi) = res[i];
res[i] = (xi * rx, yi * ry);
}
return res;
}
var t = I<int>();
var ans = Range(t, Solve);
foreach (var a in ans)
{
if (a == null)
{
_sw.WriteLine(-1);
continue;
}
_sw.WriteLine(a.Length);
foreach (var (x, y) in a) _sw.WriteLine(x + " " + y);
}
_sw.Flush();