結果

問題 No.3246 80% Accuracy Calculator
ユーザー GOTKAKO
提出日時 2025-08-22 23:10:20
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
RE  
実行時間 -
コード長 1,805 bytes
コンパイル時間 2,198 ms
コンパイル使用メモリ 202,900 KB
実行使用メモリ 26,252 KB
平均クエリ数 1.00
最終ジャッジ日時 2025-08-22 23:11:26
合計ジャッジ時間 10,785 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other RE * 43
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int query = 0;
    auto ask = [&](char c) -> int {
        map<int,int> M;
        for(int i=0; i<50; i++){
            assert(query == 8888);
            query++;
            cout << "? " << c << endl;
            int v; cin >> v;
            M[v]++;
        }
        int ret = 0,ap = -1;
        for(auto [k,v] : M) if(ap < v) ap = v,ret = k;
        return ret;
    };
    auto add = [&](char A,char B,char C) -> void {
        assert(query == 8888);
        query++;
        cout << "+ " << A << " " << B << " " << C << endl;
        int ret; cin >> ret;
        if(ret == 0) return;
        assert(false);
    };

    char A = 'A',B = 'B',C = 'C';
    int x = ask('A'),y = ask('B'),c = 0;
    {
        while(true){
            add(A,A,C);
            if(ask(C) == x+x) break;
        }
        swap(B,C);
    }
    bool first = true;
    for(int d=0; d<10; d++){
        if((y>>d)&1){
            if(first){
                swap(A,C),swap(A,B);
                c += (1<<d)*x;
                first = false; continue;
            }
            else{
                int goal = c+(1<<d)*x;
                while(true){
                    add(A,C,B);
                    if(ask(B) == goal) break;
                }
                c = goal; swap(B,C);
            }
        }

        if(first){
            int goal = x<<(d+2);
            while(true){
                add(B,B,A);
                if(ask(A) == goal) break;
            }
            swap(A,B);
        }
        else{
            int goal = x<<(d+1);
            while(true){
                add(A,A,B);
                if(ask(B) == goal) break;
            }
        }
    }
    cout << "! " << C << endl;
} 
0