WA*50 悬三关求调
查看原帖
WA*50 悬三关求调
760433
zcz0263楼主2024/9/29 17:45
#include<bits/stdc++.h>
//#include<bits/extc++.h>
using namespace std;
//using namespace __gnu_cxx;
//using namespace __gnu_pbds;
//#define int long long
#define inf INT_MAX
#define iinf inf
#define linf LLONG_MAX
#define pii pair<int,int>
#define vi vector<int>
#define vvi vector<vi>
#define pipii pair<int,pii>
#define vpii vector<pair<int,int>>
#define _max(x,y) (((x)>(y))?(x):(y))
#define _min(x,y) (((x)<(y))?(x):(y))
#define max(...) max({__VA_ARGS__})
#define min(...) min({__VA_ARGS__})
#define tomax(x,...) ((x)=max((x),__VA_ARGS__))
#define tomin(x,...) ((x)=min((x),__VA_ARGS__))
#define tomx(x,...) tomax(x,__VA_ARGS__)
#define tomn(x,...) tomin(x,__VA_ARGS__)
#define link tfshtrj
#define y1 drshzhsrd
#define mkp make_pair
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define emp emplace
#define eb(...) emplace_back(__VA_ARGS__)
#define rep(x,y,z) for(int x=(y);x<=(z);x++)
#define per(x,y,z) for(int x=(y);x>=(z);x--)
#define all(x) x.begin(),x.end()
#define allt(x,y,z) x.begin()+y,x.begin()+z
#define fi first
#define se second
#define beg begin
#define debug(x) cout<<#x<<": "<<x<<"\n"
//-O2 -std=c++14 -DONLINE_JUDGE -Wall -Wextra -Wl,-stack=536870912 
int n,m,q;
vi v;
bool tag[100];
bitset<1004> fal,tru;
//bitset<1054>ans;
int cnt;
map<pii,bool> vis;
bool ask(int x,int y){
    if(x>y) swap(x,y);
    if(x==y) return 1;
    if(vis.count(mkp(x,y))) return vis[mkp(x,y)];
    cnt++;
//    return vis[mkp(x,y)]=(ans[x]==ans[y]);
     cout<<"? "<<x<<" "<<y<<endl;
     int c;
     cin>>c;
//     if(c==-1){
//     	vi sdgerg(10000000000);
//     	rep(i,1,1000000000)sdgerg[i]=134^rand();
//	 }
     return vis[mkp(x,y)]=(c);
}
main(){
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    ios::sync_with_stdio(0),cin.tie(nullptr);
    cin>>n>>m>>q;
//    vi tr;
//    srand(time(0));
//    rep(i,1,100) tr.pb(rand()%1000+1);
//    sort(all(tr));
//    tr.erase(unique(all(tr)),tr.end());
//    rep(i,0,9) ans[tr[i]]=1;
//    cout<<"realans: \n";
//    rep(i,0,9) cout<<tr[i]<<" ";
//    cout<<"\n";
    rep(i,0,89){
        rep(j,2,11){
            tag[i]|=!ask(i*11+1,i*11+j);
        }
        if(!tag[i]) rep(j,1,11) tru[i*11+j]=1;
    }
    int t1=0;
    rep(i,0,89){
        t1+=tag[i];
    }
    if(!t1){
        cout<<"!";
        rep(i,991,1000) cout<<" "<<i;
        cout<<endl;
        return 0;
    }
    rep(i,991,1000){
        if(!ask(tru._Find_first(),i)){
            v.pb(i);
            fal[i]=1;
        }else tru[i]=1;
    }
    rep(i,0,89){
        if(!tag[i]) continue;
        bool t=ask(tru._Find_first(),i*11+1);
        if(!t){
            rep(j,1,11){
                if(ask(i*11+1,i*11+j)) v.pb(i*11+j);
                else tru[i*11+j]=1;
            }
            // goto ed;
        }else{
            rep(j,2,11){
                if(!ask(i*11+1,i*11+j)) v.pb(i*11+j);
                else tru[i*11+j]=1;
            }
        }
    }
//    ed:;
//    cout<<"cnt: "<<cnt<<"\n";
    sort(all(v));
//    cout<<"my  ans:\n";
    cout<<"!";
    for(int&i:v) cout<<" "<<i;
    cout<<endl;
    // assert(0);
}
2024/9/29 17:45
加载中...