Submission #1353746

#TimeUsernameProblemLanguageResultExecution timeMemory
1353746Francisco_MartinToy Design (EGOI22_toydesign)C++20
0 / 100
0 ms344 KiB
//EGOI 2022 Toy Design
//https://qoj.ac/contest/2260/problem/5184

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;

ll Connected(ll a,ll v,ll u){
	cout << "? " << a << " " << v << " " << u << endl;
	ll res; cin >> res; return res;
}
void DescribeDesign(vector<pair<int,int>> ans){
	cout << "! " << ans.size() << endl;
	for(auto [a,b]:ans) cout << a << " " << b << endl;
}

int main(){
	ll n, max_ops;
	cin >> n >> max_ops;
    ll m=0; vll A; vector<vll> comp; vector<bool> vis(n+1,false); 
    vector<pair<int,int>> ans; A.push_back(1); comp.push_back({});
    for(int i=2; i<=n; i++) if(Connected(m,1,i)!=m){
        m++; vis[i]=true; A.push_back(i); comp.push_back({});
    }
    for(int i=2; i<=n; i++) if(!vis[i]){
        ll l=0, r=m;
        while(l<r){
            ll mid=(l+r)/2;
            if(Connected(mid,1,i)==mid) r=mid;
            else l=mid+1;
        }
        comp[l].push_back(i);
    }
    for(int i=0; i<=m; i++) for(auto v:comp[i]) ans.push_back({A[i],v});
    DescribeDesign(ans); return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...