結果
| 問題 | No.3501 Digit Products 2 |
| コンテスト | |
| ユーザー |
AK_Mi
|
| 提出日時 | 2026-04-18 02:10:47 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 28 ms / 2,000 ms |
| コード長 | 2,548 bytes |
| 記録 | |
| コンパイル時間 | 2,405 ms |
| コンパイル使用メモリ | 346,552 KB |
| 実行使用メモリ | 30,296 KB |
| 平均クエリ数 | 11.11 |
| 最終ジャッジ日時 | 2026-04-18 02:10:57 |
| 合計ジャッジ時間 | 7,553 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 72 |
ソースコード
#include <bits/stdc++.h>
//#include <atcoder/all>
using namespace std;
//using namespace atcoder;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
//using mint = modint998244353;
int main(){
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
ll n;
cin >> n;
vector<vector<bool>> num(100,vector<bool>(10,0));
for(ll i = 1; i < 10; i++){
for(ll t = 1; t < 10; t++){
num[i*t][i] = 1;
num[i*t][t] = 1;
}
}
vector<ll> in(n-1,0);
for(ll i = 0; i < n-1; i++){
cout << "? " << i << " " << n-1 << endl;
cin >> in[i];
}
vector<vector<ll>> ans(10,vector<ll>(n,0));
ans[0][n-1] = -1;
for(ll i = 1; i < 10; i++){
ans[i][n-1] = i;
for(ll t = 0; t < n-1; t++){
if(in[t] % i != 0 || in[t] / i >= 10){
ans[i][n-1] = -1;
break;
}
ans[i][t] = in[t] / i;
}
}
if(n == 2){
if(in[0] == 1){
cout << "! 11" << endl;
}else if(in[0] == 25){
cout << "! 55" << endl;
}else if(in[0] == 49){
cout << "! 77" << endl;
}else if(in[0] == 64){
cout << "! 88" << endl;
}else if(in[0] == 81){
cout << "! 99" << endl;
}else cout << "! -1" << endl;
}else{
pair<ll,ll> ask = {-1,-1};
for(ll i = 0; i < n-1; i++){
for(ll t = i+1; t < n-1; t++){
ll count = 0;
set<ll> val;
for(ll u = 1; u < 10; u++){
if(ans[u][n-1] != -1){
count++;
val.insert(ans[u][i] * ans[u][t]);
}
}
if(val.size() == count){
ask = {i,t};
break;
}
}
if(ask.first != -1)break;
}
if(ask.first == -1){
cout << "! -1" << endl;
}else{
cout << "? " << ask.first << " " << ask.second << endl;
ll x;
cin >> x;
for(ll i = 1; i < 10; i++){
if(ans[i][n-1] != -1 && ans[i][ask.first] * ans[i][ask.second] == x){
cout << "! ";
for(ll t = n-1; t >= 0; t--){
cout << ans[i][t];
}
cout << endl;
break;
}
}
}
}
}
AK_Mi