Submission #32601636


Source Code Expand

// vim:set foldmethod=marker foldlevel=0:
/* include {{{ */
#include <bits/stdc++.h>
#include <atcoder/all>
#ifdef _DEBUG
#include "./debug.hpp"
#else
#define debug(...)
#endif
/* }}} */
/* utility {{{*/
using namespace atcoder;
using namespace std;

#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define rep2(i, s, n) for (ll i = (s); i < (ll)(n); i++)

// 注意: rep, rep2と同じ範囲を逆順にしたもの
#define rrep(i, n) for (ll i = (n)-1; i >= 0; i--)
#define rrep2(i, s, n) for (ll i = (n)-1; i >= (ll)(s); i--)


using mint = modint998244353;
/* using mint = modint1000000007; */

using ll=long long;
using vll=vector<ll>;
using vvll=vector<vll>;
using vvvll=vector<vvll>;
using vs=vector<string>;
using vvs=vector<vs>;
using vb=vector<bool>;
using vvb=vector<vb>;
using vmd=vector<mint>;
using vvmd=vector<vmd>;
using vvvmd=vector<vvmd>;
using P = pair<ll,ll>;
using vp=vector<P>;
using vvp=vector<vp>;
template <typename T> bool chmin(T &a, const T& b){if(a > b){a = b;return true;}return false;}
template <typename T> bool chmax(T &a, const T& b){if(a < b){a = b;return true;}return false;}

const ll INF = 1000000000000000000ll;
string YesNo(bool flag) { return flag ? "Yes" : "No"; }
/* }}} */

/////////////////////////////////////////////////////////////////

ll d(ll u, ll v) {
  u++; v++;
  cout<<"? "<<u<<" "<<v<<endl;
  ll ret;
  cin>>ret;
  return ret;
}

int main() {
  ll n;
  cin>>n;

  vll d0(n),d1(n);

  rep(i,n){
    if (i==0||i==1)continue;
    d0[i] = d(0, i);
  }
  rep(i,n){
    if (i==0||i==1)continue;
    d1[i] = d(1, i);
  }

  bool diff1=false,diff1under=true;
  // 0,1が隣接するかをチェック
  rep(i,n){
    if (i==0||i==1)continue;
    if (abs(d0[i]-d1[i]) > 1) {
      diff1under = false;
      break;
    }
    if (abs(d0[i]-d1[i]) == 1) {
      diff1 = true;
    }
  }

  bool neib = false;
  neib = diff1 && diff1under;
  // 0 - x - y - 1のパターンがあるかをチェック
  {
    ll x=-1,y=-1;
    rep(i,n){
      if (d0[i] == 1ll && d1[i] == 2ll) {
        x = i;
        break;
      }
    }
    rep(i,n){
      if (d0[i] == 2ll && d1[i] == 1ll) {
        y = i;
      }
    }
    if (x>0&&y>0) {
      ll dxy = d(x,y);
      if (dxy == 1ll) {
        neib = false;
      }
    }
  }

  ll ans;
  if (neib) {
    ans = 1ll;
  } else {
    ans = INF;
    rep(i,n){
      if (i==0||i==1)continue;
      chmin(ans, d0[i]+d1[i]);
    }
  }
  cout<<"! "<<ans<<endl;

  return 0;
}

Submission Info

Submission Time
Task C - Tree Queries
User hira0404
Language C++ (GCC 9.2.1)
Score 500
Code Size 2574 Byte
Status AC
Exec Time 14 ms
Memory 3860 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 1
AC × 39
Set Name Test Cases
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_shnd_00.txt, 01_shnd_01.txt, 01_shnd_02.txt, 01_shnd_03.txt, 02_srnd_00.txt, 02_srnd_01.txt, 02_srnd_02.txt, 02_srnd_03.txt, 02_srnd_04.txt, 02_srnd_05.txt, 02_srnd_06.txt, 03_rnd_00.txt, 03_rnd_01.txt, 03_rnd_02.txt, 03_rnd_03.txt, 03_rnd_04.txt, 03_rnd_05.txt, 03_rnd_06.txt, 04_killer_00.txt, 04_killer_01.txt, 04_killer_02.txt, 04_killer_03.txt, 04_killer_04.txt, 04_killer_05.txt, 04_killer_06.txt, 04_killer_07.txt, 04_killer_08.txt, 04_killer_09.txt, 04_killer_10.txt, 04_killer_11.txt, 04_killer_12.txt, 04_killer_13.txt, 04_killer_14.txt, 04_killer_15.txt, 04_killer_16.txt, 04_killer_17.txt, 05_max_00.txt, 05_max_01.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 12 ms 3808 KiB
01_shnd_00.txt AC 5 ms 3764 KiB
01_shnd_01.txt AC 6 ms 3824 KiB
01_shnd_02.txt AC 6 ms 3756 KiB
01_shnd_03.txt AC 6 ms 3836 KiB
02_srnd_00.txt AC 6 ms 3760 KiB
02_srnd_01.txt AC 7 ms 3732 KiB
02_srnd_02.txt AC 8 ms 3840 KiB
02_srnd_03.txt AC 8 ms 3764 KiB
02_srnd_04.txt AC 9 ms 3848 KiB
02_srnd_05.txt AC 8 ms 3692 KiB
02_srnd_06.txt AC 8 ms 3772 KiB
03_rnd_00.txt AC 10 ms 3736 KiB
03_rnd_01.txt AC 14 ms 3780 KiB
03_rnd_02.txt AC 10 ms 3804 KiB
03_rnd_03.txt AC 12 ms 3848 KiB
03_rnd_04.txt AC 12 ms 3688 KiB
03_rnd_05.txt AC 14 ms 3856 KiB
03_rnd_06.txt AC 13 ms 3732 KiB
04_killer_00.txt AC 9 ms 3848 KiB
04_killer_01.txt AC 10 ms 3796 KiB
04_killer_02.txt AC 9 ms 3848 KiB
04_killer_03.txt AC 13 ms 3788 KiB
04_killer_04.txt AC 10 ms 3800 KiB
04_killer_05.txt AC 11 ms 3788 KiB
04_killer_06.txt AC 14 ms 3768 KiB
04_killer_07.txt AC 10 ms 3776 KiB
04_killer_08.txt AC 11 ms 3812 KiB
04_killer_09.txt AC 12 ms 3800 KiB
04_killer_10.txt AC 10 ms 3792 KiB
04_killer_11.txt AC 9 ms 3852 KiB
04_killer_12.txt AC 12 ms 3804 KiB
04_killer_13.txt AC 10 ms 3744 KiB
04_killer_14.txt AC 13 ms 3824 KiB
04_killer_15.txt AC 9 ms 3784 KiB
04_killer_16.txt AC 10 ms 3860 KiB
04_killer_17.txt AC 11 ms 3796 KiB
05_max_00.txt AC 12 ms 3804 KiB
05_max_01.txt AC 11 ms 3788 KiB