题意:
存在一个n个节点的环,你不知道n的大小,你可以询问两个节点的距离,会返回两个节点的路径长度,一共有2条,一条长一条短。只能询问50次,请猜出n的大小。
分析:
我们发现对于任意两个点,只要询问两次,如果答案不一样,那么其相加结果之和就是一整个环。因此我们直接任找两个点,算一下即可。我们按顺序枚举1和i,如果出界了答案就是i,否则我们需要找到两个答案不同的值。
signed solve()
{
for(int i = 1; i <= 25; i ++ )
{
cout << "? 1 " << i + 1 << endl;
long long len1, len2;
cin >> len1;
if(len1 == -1) //说明爆了
{
cout << "! " << i << endl;
return 0;
}
cout << "? " << i + 1 << " 1" << endl;
cin >> len2;
if(len1 != len2) //一长一短长度不一样
{
cout << "! " << len1 + len2 << endl;
return 0;
}
}
return 0;
}
标签:cout,询问,猜猜,len2,len1,循环,长度,节点
From: https://www.cnblogs.com/liang302/p/16709273.html