結果
| 問題 | No.594 壊れた宝物発見機 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2017-11-10 22:46:19 | 
| 言語 | D (dmd 2.109.1) | 
| 結果 | 
                                RE
                                 
                             | 
| 実行時間 | - | 
| コード長 | 998 bytes | 
| コンパイル時間 | 671 ms | 
| コンパイル使用メモリ | 113,068 KB | 
| 実行使用メモリ | 25,436 KB | 
| 平均クエリ数 | 1.00 | 
| 最終ジャッジ日時 | 2024-06-12 22:25:13 | 
| 合計ジャッジ時間 | 4,428 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | RE * 20 | 
ソースコード
import std.stdio, std.array, std.string, std.conv, std.algorithm;
import std.typecons, std.range, std.random, std.math, std.container;
import std.numeric, std.bigint, core.bitop;
long ask(int[] xyz) {
    writeln("? ", xyz[0], " ", xyz[1], " ", xyz[2]);
    stdout.flush;
    return readln.to!long;
}
int search(int xyz) {
    long[int] d;
    int[] query = [-150, -150, -150];
    foreach (i; iota(-100, 101, 10)) {
        query[xyz] = i;
        d[i] = ask(query);
    }
    int mi = -1;
    long md = 1L << 59;
    foreach (k; d.keys) {
        if (d[k] < md) {
            mi = k;
            md = d[k];
        }
    }
    int mmi = -1;
    long mmd = 1L << 59;
    foreach (i; iota(-15, 15)) {
        query[xyz] = mi + i;
        long dd = ask(query);
        if (dd < mmd) {
            mmi = mi + i;
            mmd = dd;
        }
    }
    return mmi;
}
void main() {
    int x = search(0);
    int y = search(1);
    int z = search(2);
    writeln("! ", x, " " , y , " ", z);
}
            
            
            
        