結果
| 問題 | No.3519 A/B問題 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-01 22:04:18 |
| 言語 | C# (.NET 10.0.201) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 4,320 bytes |
| 記録 | |
| コンパイル時間 | 7,644 ms |
| コンパイル使用メモリ | 173,004 KB |
| 実行使用メモリ | 50,600 KB |
| 平均クエリ数 | 221.27 |
| 最終ジャッジ日時 | 2026-05-01 22:04:32 |
| 合計ジャッジ時間 | 12,725 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 13 WA * 17 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (119 ミリ秒)。 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 int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray();
public static void Main()
{
Solve();
}
static void Solve()
{
{
WriteLine("? 1 1");
var s = ReadLine();
if (s == "<")
{
WriteLine($"! 0");
return;
}
if (s == ">")
{
WriteLine($"? 0 0");
ReadLine();
}
}
var len = 100;
var ng = new HugeInt(len);
ng.Digits[0] = 1;
var ok = new HugeInt(len);
ok.Digits[len - 1] = 1;
// ok - ng > 1
while (ok.IsLarge(HugeInt.Sum(ng, 1)))
{
var mid = HugeInt.Div(HugeInt.Sum(ok, ng), 2);
WriteLine($"? 1 {mid}");
var s = ReadLine();
if (s == "<") ok = mid;
else if (s == "=")
{
WriteLine($"! {mid}");
return;
}
else
{
ng = mid;
WriteLine($"? 0 0 ");
ReadLine();
}
}
WriteLine($"! {HugeInt.Rem(ok, 1)}");
}
class HugeInt
{
public List<int> Digits;
public HugeInt(int length)
{
Digits = new List<int>(length);
for (var i = 0; i < length; ++i) Digits.Add(0);
}
public bool IsLarge(HugeInt b)
{
for (var i = Digits.Count - 1; i >= 0; --i)
{
if (Digits[i] > b.Digits[i]) return true;
if (Digits[i] < b.Digits[i]) return false;
}
return false;
}
public override string ToString()
{
var c = new List<char>(Digits.Count);
var flg = false;
for (var i = Digits.Count - 1; i >= 0; --i)
{
if (Digits[i] > 0) flg = true;
if (flg) c.Add((char)(Digits[i] + '0'));
}
return string.Concat(c);
}
public static HugeInt Sum(HugeInt a, int b)
{
var ans = new HugeInt(a.Digits.Count);
var add = b;
for (var i = 0; i < a.Digits.Count; ++i)
{
var sum = a.Digits[i] + add;
ans.Digits[i] = sum % 10;
add = sum / 10;
}
return ans;
}
public static HugeInt Rem(HugeInt a, int b)
{
var ans = new HugeInt(a.Digits.Count);
for (var i = 0; i < a.Digits.Count; ++i) ans.Digits[i] = a.Digits[i];
ans.Digits[0] -= b;
for (var i = 0; i < ans.Digits.Count; ++i)
{
if (ans.Digits[i] < 0)
{
var d = ans.Digits[i] / 10;
ans.Digits[i] += d * 10;
if (ans.Digits[i] < 0)
{
++d;
ans.Digits[i] += 10;
}
ans.Digits[i + 1] -= d;
}
}
return ans;
}
public static HugeInt Sum(HugeInt a, HugeInt b)
{
var ans = new HugeInt(a.Digits.Count);
var add = 0;
for (var i = 0; i < a.Digits.Count; ++i)
{
var sum = a.Digits[i] + b.Digits[i] + add;
ans.Digits[i] = sum % 10;
add = sum / 10;
}
return ans;
}
public static HugeInt Div(HugeInt a, int d)
{
var ans = new HugeInt(a.Digits.Count);
var rem = 0;
for (var i = a.Digits.Count - 1; i >= 0; --i)
{
rem = rem * 10 + a.Digits[i];
ans.Digits[i] = rem / d;
rem = rem % d;
}
return ans;
}
}
}