結果
| 問題 | No.3519 A/B問題 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-01 22:22:25 |
| 言語 | C# (.NET 10.0.201) |
| 結果 |
AC
|
| 実行時間 | 157 ms / 2,000 ms |
| コード長 | 3,959 bytes |
| 記録 | |
| コンパイル時間 | 10,561 ms |
| コンパイル使用メモリ | 174,356 KB |
| 実行使用メモリ | 50,140 KB |
| 平均クエリ数 | 334.00 |
| 最終ジャッジ日時 | 2026-05-01 22:22:43 |
| 合計ジャッジ時間 | 16,582 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (143 ミリ秒)。 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()
{
var len = 101;
var ans = new HugeInt(len);
var max = new HugeInt(len);
max.Digits[len - 1] = 1;
var mul = new List<HugeInt> { HugeInt.Sum(new HugeInt(len), 1) };
while (true)
{
var next = HugeInt.Sum(mul[^1], mul[^1]);
if (next.IsLarge(max)) break;
mul.Add(next);
}
for (var i = mul.Count - 1; i >= 0; --i)
{
WriteLine($"? 1 {mul[i]}");
var s = ReadLine();
if (s != "<")
{
ans = HugeInt.Sum(ans, mul[i]);
}
}
WriteLine($"! {ans}");
}
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'));
}
if (c.Count == 0) c.Add('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;
}
}
}