結果
問題 |
No.3246 80% Accuracy Calculator
|
ユーザー |
|
提出日時 | 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 |
ソースコード
#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; }