题目链接:http://codeforces.com/contest/843/problem/B
woc 这个mt19937 myrand(time(0));是个什么操作。。。。
附个博客吧:http://blog.csdn.net/caimouse/article/details/55668071
rand()上界不到50000,所以才wa了。。。
代码:
#include<bits/stdc++.h>
#define xx first
#define yy second
#define mp make_pair
using namespace std;
const int MAXN=5e4+5;
typedef pair<int,int> pii;
int val[MAXN],nxt[MAXN];
pii ask(int x)
{
if(nxt[x])
{
return mp(val[x],nxt[x]);
}
int v,w;
printf("? %d\n",x);
fflush(stdout);
scanf("%d%d",&v,&w);
val[x]=v;nxt[x]=w;
return mp(v,w);
}
mt19937 myrand(time(0));
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
srand(time(0));
int n,s,x,mx;
scanf("%d%d%d",&n,&s,&x);
mx=ask(s).xx;
int T=1999;
while(T-->999)
{
int pos=myrand()%n+1;
ask(pos);
if(val[pos]<=x&&val[pos]>mx)
{
s=pos;
mx=val[pos];
}
}
while(s!=-1)
{
ask(s);
if(val[s]>=x)
{
printf("! %d\n",val[s]);
fflush(stdout);
exit(0);
}
s=nxt[s];
}
printf("! -1\n");
fflush(stdout);
return 0;
}