結果
| 問題 |
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;
}