結果

問題 No.3501 Digit Products 2
コンテスト
ユーザー daiota
提出日時 2026-04-19 00:54:04
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 2,328 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,842 ms
コンパイル使用メモリ 214,428 KB
実行使用メモリ 30,320 KB
平均クエリ数 10.78
最終ジャッジ日時 2026-04-19 00:54:27
合計ジャッジ時間 15,741 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 23 WA * 49
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll,ll> P;
#define REP(i,n) for(ll i=0;i<ll(n);i++)
















int main(void){
	cin.tie(nullptr);  ios_base::sync_with_stdio(false);
	ll i,j;




	ll N;
	cin >> N;

	if(N==2){
		cout << "? " << 0 << ' ' << 1 << endl;
		cout.flush();

		ll p;
		cin >> p;

		if(p==1) cout << "! " << 11 << endl;
		else if(p==25) cout << "! " << 55 << endl;
		else if(p==49) cout << "! " <<  77 << endl;
		else if(p==64) cout << "! " <<  88 << endl;
		else if(p==81) cout << "! " <<  99 << endl;
		else cout << "! " << -1 << endl;
		cout.flush();

		return 0;
	}



	vector<ll> v(N,-1);
	ll c=0;
	for(i=N-2;i>=0;i--){

		if(v[i]!=-1) continue;
		if(c>=N) break;

		cout << "? " << i << ' ' << N-1 << endl;
		cout.flush();
		c++;

		ll p;
		cin >> p;

		if(p==0){
			v[i]=0;
			continue;
		}
		else if(p==1){
			v[i]=1;
			v[N-1]=1;
			break;
		}
		else if(p==25){
			v[i]=5;
			v[N-1]=5;
			break;
		}
		else if(p==49){
			v[i]=7;
			v[N-1]=7;
			break;
		}
		else if(p==64){
			v[i]=8;
			v[N-1]=8;
			break;
		}
		else if(p==81){
			v[i]=9;
			v[N-1]=9;
			break;
		}


		if(i-1>=0){
			cout << "? " << i-1 << ' ' << N-1 << endl;
			cout.flush();
			c++;

			ll q;
			cin >> q;


			if(q==0){
				v[i-1]=0;
				continue;
			}
			else if(q==1){
				v[i-1]=1;
				v[N-1]=1;
				v[i]=p;
				break;
			}
			else if(q==25){
				v[i-1]=5;
				v[N-1]=5;
				v[i]=p/5;
				break;
			}
			else if(q==49){
				v[i-1]=7;
				v[N-1]=7;
				v[i]=p/7;
				break;
			}
			else if(q==64){
				v[i-1]=8;
				v[N-1]=8;
				v[i]=p/8;
				break;
			}
			else if(q==81){
				v[i-1]=9;
				v[N-1]=9;
				v[i]=p/9;
				break;
			}
			else{

				cout << "? " << i-1 << ' ' << i << endl;
				cout.flush();
				c++;

				ll r;
				cin >> r;

				v[N-1]=(ll)sqrt(1.0*p*q/r);
				v[i]=p/v[N-1];
				v[i-1]=q/v[N-1];
				break;


			}

	    }
		else{
			break;
		}


	}




	if(v[N-1]==-1){
		cout << "! " << -1 << endl;
		cout.flush();
		return 0;
	}

	for(i=N-1;i>=0;i--){
		if(v[i]!=-1) continue;

		cout << "? " << i << ' ' << N-1 << endl;
		cout.flush();
		c++;

		ll p;
		cin >> p;

		v[i]=p/v[N-1];
	}

	if(c<=0){
		cout << "? ";
		for(i=N-1;i>=0;i--) cout << v[i];
		cout << endl;
		cout.flush();
	}
	else{
		cout << "! " << -1 << endl;
		cout.flush();
	}









	return 0;

}
0