結果
問題 |
No.1187 皇帝ペンギン
|
ユーザー |
|
提出日時 | 2025-05-06 21:52:09 |
言語 | C# (.NET 8.0.404) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,237 bytes |
コンパイル時間 | 19,076 ms |
コンパイル使用メモリ | 170,724 KB |
実行使用メモリ | 47,392 KB |
平均クエリ数 | 14.46 |
最終ジャッジ日時 | 2025-05-06 21:52:36 |
合計ジャッジ時間 | 18,640 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 47 WA * 7 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (121 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static long[] NList => ReadLine().Split().Select(long.Parse).ToArray(); public static void Main() { Solve(); } static void Solve() { var prime = Enumerable.Repeat(true, 1014).ToArray(); prime[0] = false; prime[1] = false; var plist = new List<int>(); for (var i = 2; i < prime.Length; ++i) if (prime[i]) { plist.Add(i); for (var j = i * 2; j < prime.Length; j += i) prime[j] = false; } if (!IsSafe(2)) { WriteLine(IsSafe(1) ? "! 1" : "! 0"); return; } var ok = 0; var ng = plist.Count; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (IsSafe(plist[mid])) ok = mid; else { if (IsSafe(plist[mid + 1])) { var ok2 = mid + 1; while (ng - ok2 > 1) { var mid2 = (ok2 + ng) / 2; if (IsSafe(plist[mid2])) ok2 = mid2; else ng = mid2; } break; } else ng = mid; } } if (IsSafe(plist[ng] + 1)) { ok = plist[ng] + 1; ng = plist[ng + 1]; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (IsSafe(mid)) ok = mid; else ng = mid; } WriteLine("! " + ok); } else { ok = plist[ng - 1]; ng = plist[ng]; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (IsSafe(mid)) ok = mid; else ng = mid; } WriteLine("! " + ok); } } static bool IsSafe(int n) { WriteLine($"? {n}"); return ReadLine() == "safe"; } }