結果
| 問題 | No.594 壊れた宝物発見機 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2019-08-30 02:36:59 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 141 ms / 2,000 ms | 
| コード長 | 1,582 bytes | 
| コンパイル時間 | 2,231 ms | 
| コンパイル使用メモリ | 193,544 KB | 
| 最終ジャッジ日時 | 2025-01-07 15:38:29 | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 20 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int ask(int x,int y,int z) {
    printf("? %d %d %d\n",x,y,z);
    fflush(stdout);
    int d;
    cin>>d;
    return d;
}
int main() {
    int l=-100;
    int r=100;
    while (l+2<r) {
        int m1=(2*l+r)/3;
        int m2=(l+2*r)/3;
        int v1=ask(m1,0,0);
        int v2=ask(m2,0,0);
        if (v1<v2)
            r=m2;
        else if (v1>v2)
            l=m1;
        else
            l=m1,r=m2;
    }
    int x=l;
    int mn=ask(l,0,0);
    for (int i=l+1;i<=r;i++) {
        int d=ask(i,0,0);
        if (d<mn) {
            mn=d;
            x=i;
        }
    }
    l=-100;
    r=100;
    while (l+2<r) {
        int m1=(2*l+r)/3;
        int m2=(l+2*r)/3;
        int v1=ask(0,m1,0);
        int v2=ask(0,m2,0);
        if (v1<v2)
            r=m2;
        else if (v1>v2)
            l=m1;
        else
            l=m1,r=m2;
    }
    int y=l;
    mn=ask(0,l,0);
    for (int i=l+1;i<=r;i++) {
        int d=ask(0,i,0);
        if (d<mn) {
            mn=d;
            y=i;
        }
    }
    l=-100;
    r=100;
    while (l+2<r) {
        int m1=(2*l+r)/3;
        int m2=(l+2*r)/3;
        int v1=ask(0,0,m1);
        int v2=ask(0,0,m2);
        if (v1<v2)
            r=m2;
        else if (v1>v2)
            l=m1;
        else
            l=m1,r=m2;
    }
    int z=l;
    mn=ask(0,0,l);
    for (int i=l+1;i<=r;i++) {
        int d=ask(0,0,i);
        if (d<mn) {
            mn=d;
            z=i;
        }
    }
    printf("! %d %d %d\n",x,y,z);
    fflush(stdout);
    return 0;
}
            
            
            
        